16 номер. Рекурсия
Вычисление рекурсивной функции
(Р. Косов) Алгоритм вычисления функций F(n) и G(n), где n - целое число, задан следующими соотношениями:
F(n)= F(n-6) + 2048, если n > 30;
F(n) = 3 × (G(n-5) + 13),, если n ≤ 30;
G(n) = 2×n + 50, если n ≥ 221 337;
G(n) = G(n + 11) - 48, если n < 221 337.
Чему равно значение функции F(5078)?
Подсказка
Начните с базового случая и направления изменения аргумента. Для выражения из нескольких значений сначала проверьте, можно ли сократить общую часть.
Решение
from functools import * @lru_cache(None)def f(n): if n > 30: return f(n-6) + 2048 else: return 3 * (g(n-5) + 13) @lru_cache(None)def g(n): if n >= 221337: return 2*n + 50 else: return g(n+11) - 48 for i in reversed(range(301210)): g(i)for i in range(55000): f(i) print(f(5078))