Проблема с рекурсией. Вычислить 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);
→ Ссылка