
Гавриленко
6 год назад
Вася изучал сегодня на информатике тему "Рекурсия". После урока на доске осталась такая функция (для условия на языке Pascal — процедура):на языке Python:def f(n):print('*')if n > 2:f(n - 1)f(n - 2) на языке Pascal:procedure f(n: longint);beginwriteln('*');if n > 2 then beginf(n - 1);f(n - 2);end;end; на языке C++: int f(int n){cout << '*' << endl;if (n > 2){f(n - 1);f(n - 2);}} Вася задумался над таким вопросом — а какое наименьшеенатуральное число нужно поставить вместо n в вызов этой функции, чтобы было напечатано не меньше 5000 звездочек? Пожалуйста посчитайте ему узнать ответ на этот вопрос.В качестве ответа укажите одно натуральное число.
ОТВЕТЫ

Артур
Oct 24, 2020
очевидно что звездочек
f(1) = 1
f(2) = 1
f(3) = 1 + f(2) + f(1)
f(n) = 1 + f(n-1) + f(n-2)
Посчитаем на хаскеле f(n) при n=[1,2..20]
--Код haskell
f(1) = 1
f(2) = 1
f(n) = 1 + f(n-1) + f(n-2)
main = print(show [(n, f(n)) | n <- [1,2..20]])
Вывод
(1,1),(2,1),(3,3),(4,5),(5,9),(6,15),(7,25),(8,41),(9,67),(10,109),(11,177),(12,287),(13,465),(14,753),(15,1219),(16,1973),(17,3193),(18,5167),(19,8361),(20,13529)
значит при f(18) = 5167 - т0 что надо
18
f(1) = 1
f(2) = 1
f(3) = 1 + f(2) + f(1)
f(n) = 1 + f(n-1) + f(n-2)
Посчитаем на хаскеле f(n) при n=[1,2..20]
--Код haskell
f(1) = 1
f(2) = 1
f(n) = 1 + f(n-1) + f(n-2)
main = print(show [(n, f(n)) | n <- [1,2..20]])
Вывод
(1,1),(2,1),(3,3),(4,5),(5,9),(6,15),(7,25),(8,41),(9,67),(10,109),(11,177),(12,287),(13,465),(14,753),(15,1219),(16,1973),(17,3193),(18,5167),(19,8361),(20,13529)
значит при f(18) = 5167 - т0 что надо
18
210