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