Проблема с рекурсией. Вычислить y(n)=1/(1+(1/(2+(1/(3+(1/......+1/((n-1)+1/n)
Вычислить y(n)=1/(1+(1/(2+(1/(3+(1/......+1/((n-1)+1/n).
надо получить условно 1/(1+1/(2+1/(3+1/(4+1/5))))
а выходит рекурсия 1/(5+1/(4+1/(3+1/(2+1))))
не знаю как сделать правильно
#include <iostream>
using namespace std;
double calRec(int n) {
if (n == 1)
return 1;
else return 1 / (n + calRec(n - 1));
}
double cal(int n) {
double result = 1 / n;
for (int i = n; i >= 1; i--) {
result = 1 / (i + result);
}
return result;
}
int main() {
setlocale(LC_ALL, "RU");
int n = 5;
// Вычисление значения с использованием рекурсии
double recRes = calRec(n);
// Вычисление значения без использования рекурсии
double Res = cal(n);
cout << "y(" << n << ") (рекурсивно) = " << recRes << endl;
cout << "y(" << n << ") (итеративно) = " << Res << endl;
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Попробуйте так:
double calRec(int n, int m = 1)
{
if (m >= n)
return 1./m;
else return 1 / (m + calRec(n, m+1));
}
Здесь m — текущее значение, а n — максимальное.
Смысл в том, что идем не сверху вниз, а снизу вверх.
Автор решения: Stanislav Volodarskiy
→ Ссылка
Линейная/хвостовая рекурсия:
double calRec(int n, double s) {
if (n == 0) {
return s;
}
return calRec(n - 1, 1 / (n + s));
}
Вызывать с нулём:
double recRes = calRec(n, 0);