№16 · решено
одна функция, шаг 9
Алгоритм вычисления функции F(n), где n — целое число, задан соотношениями: F(n) = 6 при n < 17; F(n) = (n + 5) × F(n − 9), если n ≥ 17. Чему равно значение выражения (F(234561) / 436 + F(234552) / 218) / F(234534)?
Источник: ФИПИ (банк), № 29083
Ответвпиши то, что вывела программа
Показать разбор
- Перепиши функцию из условия: F(n) = 6 при n < 17, иначе (n + 5) * F(n - 9).
- Значения получаются огромные, поэтому поставь @lru_cache(100): кэш держит только последние значения и не забивает память.
- Прогрей функцию циклом снизу вверх до самого большого нужного n. Значения F(234561), F(234552) и F(234534) запомни в переменные прямо в цикле.
- Все остальные n считай в ветке else: F(n). Без неё кэш не прогреется.
- Посчитай выражение через x1, x2, x3, все деления пиши через //, и напечатай результат.
from functools import lru_cache
@lru_cache(100)
def F(n):
if n < 17:
return 6
return (n + 5) * F(n - 9)
for n in range(17, 234562):
if n == 234561:
x1 = F(n)
elif n == 234552:
x2 = F(n)
elif n == 234534:
x3 = F(n)
else:
F(n)
print((x1 // 436 + x2 // 218) // x3)