16 номер. Рекурсия
Вычисление рекурсивной функции
(Р. Косов) Алгоритм вычисления функций F(n) и G(n), где n - целое число, задан следующими соотношениями:
F(n)= F(n-4) + 3020, если n > 40;
F(n) = 3 × (G(n-2) - 15), если n ≤ 40;
G(n) = 10×n + 50, если n ≥ 301 208;
G(n) = G(n + 7) - 21, если n < 301 208.
Чему равно значение функции F(2026)?
Подсказка
Начните с базового случая и направления изменения аргумента. Для выражения из нескольких значений сначала проверьте, можно ли сократить общую часть.
Решение
from functools import * @lru_cache(None)def f(n): if n > 40: return f(n-4) + 3020 else: return 3 * (g(n-2) - 15) @lru_cache(None)def g(n): if n >= 301208: return n*10 + 50 else: return g(n+7) - 21 for i in reversed(range(301210)): g(i)for i in range(55000): f(i) print(f(2026))