Вася изучал сегодня ** информатике тему "Рекурсия". После урока ** доске осталась такая...

0 голосов
52 просмотров

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


Информатика (32 баллов) | 52 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Количество напечатанных "*":
f(1) - 1
f(2) - 1
f(3) - 3
f(4) - 5
f(5) - 9
Следующие значения можно вычислять, используя закономерность:
f(6) - 15 = 9+(9-3) = 9+6 = 15
f(7) - 25 = 15+(15-5) = 15+10 = 25
f(8) - 41 = 25+(25-9) = 25+16 = 41
f(9) - 41+(41-15) = 67
f(10) - 67+(67-25) = 109
f(11) - 109+(109-41) = 177
f(12) - 177+(177-67) = 287
f(13) - 287+(287-109) = 465
f(14) - 465+(465-177) = 753
f(15) - 753+(753-287) = 1219
f(16) - 1219+(1219-465) = 1973
Ответ: 16

(194k баллов)