
Сообщение от
daslex
Решение задачи
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| #include <iostream>
#include <math.h>
using namespace std;
double rec(double i,double k,int N)
{
static int count=0;
count++; //При каждом вызове увеличиваем счетчик вызовов функции
double sum=sqrt(i+k); //Корень суммы двух слагаемых
i++;k++; //Меняем значения слагаемых для будущих вычислений
if (count<N) return sqrt(rec(i,k,N))*sum; //Рекурсивный вызов нужное число раз
else return sum; //Вывод окончательного результата
}
void main()
{ int x,y,N; //Первое слагаемое, второе слагаемое и количество вызовов функции
cin>>x>>y>>N; //Вводим нужные данные
cout<<rec(x,y,N)<<'\n'; //Расчет и вывод результата на экран
system("PAUSE");
} |
|
Для того чтобы функция знала когда остановится внутри функции объявлена статическая переменная
count. Являясь локальной действует она только внутри функции, но ведет себя внутри этой функции как глобальная.
При произведении расчета нужно осознавать, что только после необходимых вычислений нужно менять слагаемые. Поэтому сначала вычисление корня и запоминание этого в sum и только после этого увеличение каждого из слагаемых на один.
Дальше только проверка условия. Выполнился ли вызов функции столько раз сколько ей сказали. Если нет, то функция каждый раз снова вызывает себя, если же вызов функции выполнился сколько нужно, то выводится только то значение, которое нужно
спасибо большое за помощь!
но при вводе N больше единицы, программа просто отказывается работать ):
а можно этот count заменить просто условием, как у меня.. что до тех пор, пока какая-то переменная будет меньше, то запустить функцию ещё раз?