Проблемы с задачей на рекурсию

Условие: На каждом следующем дне рождения Винни-Пух съедает столько же пищи что и на двух предыдущих. На двух первых днях рождения у Пятачка и Кролика он съел по 100 г пищи. Написать программу, определяющую, сколько килограммов пищи ВинниПух съест на пятнадцатом дне рождения.

#include "iostream"
using namespace std;

int rec(int i, int d1, int d2)
{
    int s;

    while (i <= 15)
    {
        s = d1 + d2;
        d1 = d2;
        d2 = s;
        i++;
        rec(i, d1, d2);
    }
    return s;
}

int main() {
    setlocale(LC_ALL, "russian");
    int res = rec(2, 100, 100);
    cout << "На 15 день Винни-Пух съест " << res << " грамм еды" << endl;
}

Где ошибки в коде и как будет записать правильнее ?


Ответы (1 шт):

Автор решения: Harry

Делаем нормальную рекурсивную функцию...

int rec(int i)
{
    if (i == 1 || i == 2) return 100;  // Первый и второй день
    return rec(i-1) + rec(i-2);        // В i-1 день - сумма двух предыдущих
}

....

int res = rec(15);
cout << "На 15 день Винни-Пух съест " << res << " грамм еды" << endl;

Только вот не рекомендовал бы использовать для больших чисел - ну, там, на 50-й день... Там такая наивная рекурсия будет работать ну очень долго...

→ Ссылка