Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 11
1

Рекурсивная функция для вычисления суммы ряда

14.12.2017, 22:43. Показов 5705. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите вычислить сумму с использованием рекурсивной функции. Программу написал, но сумму она не считает, а просто выдает все члены последовательности, а надо бы их сложить. вот формула:
S=1+x/1!+x^2/2!+ x^3/3!+...+x^n/n!

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>
#include<windows>
#include <math.h>
#include <math>
#include <conio>
#include<stdio.h>
   using namespace std;
 double rec(int n){
     if (n>0) {
return(rec(n-1))/n;
  } else
  { return 1;}
  }
int main(){
int c,x, h;
cout<<"vvedite znachenie x"<<endl;
cin>>x;
cout<<"vvedite znachenie n"<<endl;
cin>>h;
 int k,z,d;
     k=1;
     z=1;
  for(int i=1;i<= h; i++)
  {k=k*x;
 cout<<rec(i)*k <<endl;
   }
system ("pause");
 }
[/CPP]
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2017, 22:43
Ответы с готовыми решениями:

Рекурсивная функция вычисления суммы знакопеременного ряда
Написать рекурсивную функцию для вычисления суммы : S = 1 -1/2 + 1/4 -1/8+1/16 -1/32.., функцию pow...

Рекурсивная функция вычисления суммы бесконечного ряда
Всем привет) Объясните кто нибудь как это можно сделать?)

Рекурсивная функция для нахождения суммы ряда
Создайте рекурсивную функцию для нахождения суммы s=Σ(x^n/n) выдает ошибку, объясните,...

Рекурсивная функция для вычисления суммы элементов арифметической прогрессии
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int pr(int n, int a1, int d,int sum) { if(n==1) return...

8
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
15.12.2017, 22:54 2
laku, здравствуйте! Я сделал так:

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
33
#include <bits/stdc++.h>
 
using namespace std;
 
int Fact(int n)
{
    if (n == 1)
        return 1;
    else
        return n * Fact(n-1);
}
 
double Sum(int x, int n)
{
    if (n == 0)
        return 1;
    else
        return Sum(x, n-1) + pow(x, n) / Fact(n);
}
 
int main()
{
    int n, x;
    cout << "Enter a number:" << "\n";
    cout << "x = ";
    cin >> x;
    cout << "Enter a number:" << "\n";
    cout << "n = ";
    cin >> n;
    cout << "Target sum: " << Sum(x, n) << "\n";
    system("pause");
    return 0;
}
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
15.12.2017, 23:26 3
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

Fixer_84, Возможно, ваш код и будет работать при небольших n. И будет много-много раз вычислять уже многократно вычисленное. Но ведь есть на свете какой-то языческий Бог или хотя бы Муза Алгоритмов! Я думаю, ваш код их чрезвычайно расстраивает
1
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
15.12.2017, 23:30 4
Байт, здравствуйте! Спасибо за ваше замечание. Лучше ничего придумать не смог. Рекурсией пока плохо владею.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.12.2017, 00:46 5
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Рекурсией пока плохо владею.
Понимаете, это тот случай, когда рекурсия и на фиг не нужна. Просто каждый очередной член получается из предыдущего парой простых действий - умножением и делением. Реализовать все это можно и рекурсией. Давным давно доказано, что все, что можно в цикле, можно сделать и рекурсией. И наоборот. Но вот посмотрите. Вам нужно посчитать несколько факториалов, идущих подряд. И вы уже посчитали 20! А теперь вам нужен 21! И вы снова считаете все 20 сомножителей + еще один. А к чему эти усилия? ведь 21! = 21*20! А последний уже посчитан только что.
Я тут даже не говорю о переполнении представления и прочих заморочках машинной арифметики. В конце концов для любого, самого изощренного алгоритма можно придумать (в той же задаче) такие входные данные, что ваш алгоритм лопнет. Просто не хватит никаких ресурсов. Но наш долг - всеми силами увеличивать диапазон решаемых задач. Отдавая себе отчет, что в борьбе с бесконечностью мы все равно проиграем.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
16.12.2017, 07:38 6
Байт, иногда мне кажется, что надо бить с вертушки в челюсть тем преподам, которые приводят в качестве примера рекурсии вычисление факториала. Прям в момент когда они рот у доски раскрывают бить. Тогда множественныне сложные переломы челюсти со смещениями получаются.
Потому что судя по форуму, уже целое поколение студентов просто не знают другого способа вычислить факториал, кроме как рекурсией! Или надеюсь слава богу знают аналогичный цикл, но считают рекурсию наиболее естественным алгоритмом для задачи вычисления факториала.
Спрашивается. Ну почему, чёрт возьми! Да, рекурсия - одна из главных тем, которые проходят в академическом курсе... но так для её демонстрации есть 100500 примеров гораздо более естественной рекурсивности алгоритма! Те же Ханойские башни, быстрая сортировка, бинарный поиск, чего-нибудь фрактальное... зачем учить считать факториалы рекурсией?
1
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 11
16.12.2017, 11:31  [ТС] 7
Большое спасибо, а в 18 строке плюс икс в степени эн или умножить?

Добавлено через 7 минут
Здравствуйте. Большое спасибо. Да, действительно, можно и без рекурсии. Но без нее мы уже писали)). Эту же зависимость. Скажите, а в 18 строке плюс или умножить?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
16.12.2017, 11:47 8
Kuzia domovenok, при полном согласии с вашими словами попытаюсь найти объяснение (но не оправдание!) этого феномена. Видимо, так устроен человеческий мозг, если его не развивать. Вот видит человек формулу, и все, больше не видит ничего. Видит факториал (а рекурсивное определение его - вещь наиболее естественная) - давай рекурсивно его считать,
видит (-1)n, и ничего кроме pow(-1, n) в голову не приходит. Найти какое-то там число из 8 цифр - тут же цикл for(i=10000000; i<=99999999; i++)
А преподы - они такие же люди.
Но продемонстрировать рекурсию на факториале - соблазн велик. Уж больно это просто, а для первой демонстрации понятия простота просто необходима. Но я бы погодил сходу бить из вертушки в челюсть. Ибо честный препод, после демонстрации рекурсивного кода должен сказать - "Дети! Никогда так не делайте! А делайте вот так!..." и перейти к Ханойским башням

Добавлено через 3 минуты
Цитата Сообщение от laku Посмотреть сообщение
Скажите, а в 18 строке плюс или умножить?
Так как уважаемогоFixer_84 в данный момент на форуме нет, рискну ответить за него. Конечно, плюс.
2
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
16.12.2017, 15:46 9
laku, вот вариант без рекурсии:

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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n, x;
    int power, fact;
    double sum;
    cout << "Enter a number:" << "\n";
    cout << "x = ";
    cin >> x;
    cout << "Enter a number:" << "\n";
    cout << "n = ";
    cin >> n;
    power = fact = 1;
    sum = 0;
    for (int i = 1; i <= n; i++)
    {
        power *= x;
        fact *= i;
        sum += (double) power / fact;
    }
    cout << "Target sum: " << ++sum << "\n";
    system("pause");
    return 0;
}
1
16.12.2017, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2017, 15:46
Помогаю со студенческими работами здесь

Рекурсивная функция суммы ряда
Написать рекурсивную программу, которая считала бы сумму элементов следующего ряда: 2^0 + 2^1 + ......

Функция вычисления суммы ряда для заданного аргумента
Помогите решить задачу. Написать функцию вычисления суммы ряда для заданного аргумента с...

Функция для вычисления суммы члена ряда. Не могу найти ошибку
Условие: Разработать функцию для вычисления члена ряда: (-1)^n/(n+1)! Используя разработанную...

Функция вычисления суммы ряда ln(x)
Здравствуйте поставили задачу написать программу на вычисление суммы ряда вида ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru