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

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

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

Студворк — интернет-сервис помощи студентам
помогите вычислить сумму с использованием рекурсивной функции. Программу написал, но сумму она не считает, а просто выдает все члены последовательности, а надо бы их сложить. вот формула:
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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2017, 22:43
Ответы с готовыми решениями:

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

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

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

8
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
15.12.2017, 22:54
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
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
15.12.2017, 23:26
Лучший ответ Сообщение было отмечено Kuzia domovenok как решение

Решение

Fixer_84, Возможно, ваш код и будет работать при небольших n. И будет много-много раз вычислять уже многократно вычисленное. Но ведь есть на свете какой-то языческий Бог или хотя бы Муза Алгоритмов! Я думаю, ваш код их чрезвычайно расстраивает
1
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
15.12.2017, 23:30
Байт, здравствуйте! Спасибо за ваше замечание. Лучше ничего придумать не смог. Рекурсией пока плохо владею.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
16.12.2017, 00:46
Цитата Сообщение от Fixer_84 Посмотреть сообщение
Рекурсией пока плохо владею.
Понимаете, это тот случай, когда рекурсия и на фиг не нужна. Просто каждый очередной член получается из предыдущего парой простых действий - умножением и делением. Реализовать все это можно и рекурсией. Давным давно доказано, что все, что можно в цикле, можно сделать и рекурсией. И наоборот. Но вот посмотрите. Вам нужно посчитать несколько факториалов, идущих подряд. И вы уже посчитали 20! А теперь вам нужен 21! И вы снова считаете все 20 сомножителей + еще один. А к чему эти усилия? ведь 21! = 21*20! А последний уже посчитан только что.
Я тут даже не говорю о переполнении представления и прочих заморочках машинной арифметики. В конце концов для любого, самого изощренного алгоритма можно придумать (в той же задаче) такие входные данные, что ваш алгоритм лопнет. Просто не хватит никаких ресурсов. Но наш долг - всеми силами увеличивать диапазон решаемых задач. Отдавая себе отчет, что в борьбе с бесконечностью мы все равно проиграем.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.12.2017, 07:38
Байт, иногда мне кажется, что надо бить с вертушки в челюсть тем преподам, которые приводят в качестве примера рекурсии вычисление факториала. Прям в момент когда они рот у доски раскрывают бить. Тогда множественныне сложные переломы челюсти со смещениями получаются.
Потому что судя по форуму, уже целое поколение студентов просто не знают другого способа вычислить факториал, кроме как рекурсией! Или надеюсь слава богу знают аналогичный цикл, но считают рекурсию наиболее естественным алгоритмом для задачи вычисления факториала.
Спрашивается. Ну почему, чёрт возьми! Да, рекурсия - одна из главных тем, которые проходят в академическом курсе... но так для её демонстрации есть 100500 примеров гораздо более естественной рекурсивности алгоритма! Те же Ханойские башни, быстрая сортировка, бинарный поиск, чего-нибудь фрактальное... зачем учить считать факториалы рекурсией?
1
0 / 0 / 0
Регистрация: 26.10.2017
Сообщений: 11
16.12.2017, 11:31  [ТС]
Большое спасибо, а в 18 строке плюс икс в степени эн или умножить?

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

Добавлено через 3 минуты
Цитата Сообщение от laku Посмотреть сообщение
Скажите, а в 18 строке плюс или умножить?
Так как уважаемогоFixer_84 в данный момент на форуме нет, рискну ответить за него. Конечно, плюс.
2
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
16.12.2017, 15:46
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.12.2017, 15:46
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 25.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 23.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru