Форум программистов, компьютерный форум CyberForum.ru

Рекурсивная функция (вычислить сумму) - C++

Восстановить пароль Регистрация
 
Kingaz
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 15
25.03.2013, 12:27     Рекурсивная функция (вычислить сумму) #1
Помогите вычислить сумму с помощью рекурсивной функции

Рекурсивная функция (вычислить сумму)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2013, 12:27     Рекурсивная функция (вычислить сумму)
Посмотрите здесь:

C++ Рекурсивная функция
C++ Рекурсивная функция
C++ рекурсивная функция
C++ Рекурсивная функция!
Рекурсивная функция: вычислить среднее арефметическое элементов одномерного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
25.03.2013, 16:03     Рекурсивная функция (вычислить сумму) #2
Kingaz, как -то так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
double rekurs(int _number, double _sum, int _Kol)
{
    if(_number == 0)
        return _sum;
    else
    {
        _sum += (1.0 / (_number * _Kol));
        cout << (_number * _Kol) << endl;
        _sum = rekurs(_number - 1, _sum, _Kol);
        return _sum;
    }
}
 
int main()
{
    int number;
    double sum = 0;
 
    cout << "Enter number: ";
        cin >> number;
 
    cout << "Result: " << setprecision(5) << rekurs(number, sum, number);
    
    cout << "\n\n";
    return 0;
}
Kingaz
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 15
25.03.2013, 17:43  [ТС]     Рекурсивная функция (вычислить сумму) #3
Считает неправильно
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
25.03.2013, 18:09     Рекурсивная функция (вычислить сумму) #4
Kingaz, так вроде правильно должно считать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
double rekurs(int _number, double _sum, int _Kol)
{
    if(_number == 0)
        return _sum;
    else
    {
        for(int i = 1; i <= _Kol; ++i)
            _sum += 1.0 / _number;
 
        _sum = rekurs(_number - 1, _sum, _Kol);
        return _sum;
    }
}
 
int main()
{
    int number;
    double sum = 0;
 
    cout << "Enter number: ";
        cin >> number;
 
    cout << "Result: " << setprecision(5) << rekurs(number, sum, number);
    
    cout << "\n\n";
    return 0;
}
Добавлено через 16 минут
Kingaz, ну че?
Kingaz
0 / 0 / 0
Регистрация: 11.10.2011
Сообщений: 15
25.03.2013, 22:07  [ТС]     Рекурсивная функция (вычислить сумму) #5
Всё равно не правильно(

Вот правильный код на паскале, я попытался переделать его на c++, но ничего не получилось, программа стала вылетать

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
program Project1;
 
{$APPTYPE CONSOLE}
 
{$R *.res}
 
uses
  System.SysUtils;
 
const n = 2;
 
function f(const lvl : integer; sum : integer) : real;
var
   s : real;
   i : integer;
begin
   if lvl = 0 then f := 1 / sum
   else
   begin
      s := 0;
      for i := 1 to n do s := s + f(lvl - 1, sum + i);
      f := s;
   end
end;
 
var s : real;
    i1, i2, i3, i4 : integer;
begin
 
   writeln(f(n, 0):12 :8);
   ReadLn;
end.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
25.03.2013, 22:14     Рекурсивная функция (вычислить сумму) #6
Kingaz, тогда покажи как считать и я реализую.
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
25.03.2013, 22:38     Рекурсивная функция (вычислить сумму) #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
using namespace std;
 
double recurse(int lvl, double sum,int n)
{
       if(!lvl)
       {
               return 1.0/sum;
       }
       double s=0;
       for(double i=1;i<n+1;i++)
       {
               s += recurse(lvl - 1,sum + i,n);
       }
       return s;
}
 
double task(int n)
{
       return recurse(n,0,n);
}
 
int main()
{
    cout<<task(2)<<endl;
    cin.get();
}
Переписал. Сложность данного алгоритма 9^n так что уже начиная с n=7 пойдут аномалии...
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
25.03.2013, 22:54     Рекурсивная функция (вычислить сумму) #8
eocron, я так понял, что если N = 3, то делаем так, (1 / (1 + 1 + 1)) + (1 / (2 + 2 + 2)) + (1 / (3 + 3 + 3)) и того 0,33 + 0,16 + 0,11 = 0,6
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
25.03.2013, 23:12     Рекурсивная функция (вычислить сумму) #9
нет, это n-мерная матрица. Нужно найти сумму элементов в ней. Проще говоря перебор всех возможных комбинаций.
Я немного ошибся со сложностью. На самом деле сложность будет O(n^n) итого n=3 -> 3^3 = 27 дробей. При n=2 будет четыре дроби 1/(1+1) + 1/(1+2) + 1/(2+1) + 1/(2+2) ~ 1.41666...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 23:23     Рекурсивная функция (вычислить сумму)
Еще ссылки по теме:

Рекурсивная функция C++ C++
C++ Рекурсивная функция (вычислить, через сколько лет долг бизнесмена превысит s тысяч рублей)
C++ Рекурсивная функция вычисляющая сумму ряда

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
25.03.2013, 23:23     Рекурсивная функция (вычислить сумму) #10
eocron, не разобрался, ну тогда мой вариант так будет выглядеть

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
double rekurs(int _number, double _sum, int _Kol)
{
    if(_number == 0)
        return _sum;
    else
    {
        for(int i = 1; i <= _Kol; ++i)
            _sum += 1.0 / (_number + i);
 
        _sum = rekurs(_number - 1, _sum, _Kol);
        return _sum;
    }
}
 
int main()
{
    int number;
    double sum = 0;
 
    cout << "Enter number: ";
        cin >> number;
 
    cout << "Result: " << setprecision(5) << rekurs(number, sum, number);
    
    cout << "\n\n";
    return 0;
}
Yandex
Объявления
25.03.2013, 23:23     Рекурсивная функция (вычислить сумму)
Ответ Создать тему
Опции темы

Текущее время: 13:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru