Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Ien
0 / 0 / 1
Регистрация: 25.02.2010
Сообщений: 5
1

Вычислить значение выражения с помощью рекурсивной функции

25.02.2010, 11:10. Просмотров 1066. Ответов 4
Метки нет (Все метки)

Есть условие: нужно вычислить значение выражения типа V1+V2+Vn, с помощью рекурсивной функции.
где V-это общий корень, сори за корявость -).
я такой код писал
C
1
2
3
4
5
6
7
double func(int n)
{
       double sum;
       if(n<2) sum=1;
       else sum+=sqrt(n-- + sqrt(func(n-1)));
       return sum;
}
При н=6 пишет переполнен стек *(
Подскажите где ошибка? Зарание спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2010, 11:10
Ответы с готовыми решениями:

Вычислить значение выражения с помощью рекурсивной функции
S=ln(1+a)

С помощью рекурсивной функции вычислить сумму
Дано натуральное n, действительные a1,a2,...,an.С помощью рекурсивной функции вычислить сумму...

С помощью рекурсивной функции вычислить сумму элементов одномерного массива
С помощью рекурсивной функции вычислить сумму элементов одномерного массива. Есть примеры но...

Вычислить значение выражения с помощью цикла for
Помогите новичку С!!!Задача очень сложная для меня!!Прошу помощи АКУЛ ПРОГРАММИРОВАНИЯ))Заранее...

Вычислить значение выражения с помощью рекурсии и итерации
Вычислить a(k)=(k div 3) + ( k div 2) двумя заданными методами. a(0)=1; k&gt;1. Вывести на экран...

4
solar_wind
763 / 753 / 59
Регистрация: 06.07.2009
Сообщений: 3,001
Завершенные тесты: 1
25.02.2010, 12:34 2
это выражение лучше разбей на несколько, а то тут не понятно в каком порядке вычисления выполняются
sqrt(n-- + sqrt(func(n-1)));

Стек переполняется если итераций очень много, это нормально, поэтому рекурсию не стоит где попало использовать. А много итераций скорее всего из за того выражения, о котором я писал выше.
2
Yurii_74
paladin
285 / 185 / 7
Регистрация: 25.02.2009
Сообщений: 592
26.02.2010, 09:46 3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Стек переполняется если итераций очень много
такие моменты хорошо решаются с помощью динамической памяти.
0
Aye Aye
370 / 284 / 97
Регистрация: 17.12.2009
Сообщений: 567
26.02.2010, 19:08 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

если имелось ввиду sqrt(1) + sqrt(2) + sqrt(3) + ... + sqrt(n) то решение очивидно и тривиально:
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <conio.h>]
 
float f(int n)
{
       if (n>0) return sqrt(n) + f(--n);
}
void main()
{
     printf("%f",f(6));
     getch();
}
))) обрати внимание на постфиксный оператор -- он применяется к переменной только после того как она поучаствует во всех связанных с ней вычислениях, т.е. после применения к ней функции. А префиксный -- до применения) ))

Добавлено через 9 минут
а если sqrt(1 + sqrt(2 + sqrt(3 + sqrt(... + sqrt(n-1 + sqrt(n)))))) то:
C
1
2
3
4
5
float f(int n,int d)
{
       if (n != d) return sqrt(d + f(n,++d));
       return sqrt(d);
}
1
Ien
0 / 0 / 1
Регистрация: 25.02.2010
Сообщений: 5
26.02.2010, 23:53  [ТС] 5
Второй вариант имелся ввиду, спасибо
про префексные и постфиксные операторы я знаю-)
0
26.02.2010, 23:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2010, 23:53

Описать функцию и вычислить с ее помощью значение выражения
Задача: Описать функцию Sign(X) целого типа, возвращающую для вещественного числа X следующие...

Перемножить два числа с помощью рекурсивной функции
Вообще не понимаю тему рекурсия..... Нужно написать программу которая перемножает 2 числа без...

Вычислить с помощью рядов тейлора значение функции косинус х
Добрый вечер. Задание: вычислить с помощью рядов тейлора значение функции косинус х. Написал...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru