Проблемы с задачей на рекурсию
Условие: На каждом следующем дне рождения Винни-Пух съедает столько же пищи что и на двух предыдущих. На двух первых днях рождения у Пятачка и Кролика он съел по 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-й день... Там такая наивная рекурсия будет работать ну очень долго...