Все задачи №16
№16

две функции, одна смотрит вверх

Алгоритм вычисления функций F(n) и G(n), где n — целое число, задан соотношениями: F(n) = F(n − 8) + 1095, если n ≥ 21; F(n) = 10 × (G(n − 7) − 36), если n < 21; G(n) = n / 23 + 33, если n ≥ 22560; G(n) = G(n + 11) − 4, если n < 22560. Чему равно значение функции F(548)?

Источник: ФИПИ (ЕГКР 18.04.2026), № 28937

Ответвпиши то, что вывела программа
Показать разбор
  1. Перепиши обе функции и поставь на них @lru_cache(100). Деление на 23 пиши как n // 23, берём целую часть.
  2. G обращается к G(n + 11), то есть смотрит вверх. Прогрей её по убыванию, от 22560 почти до самого низа.
  3. F обращается к F(n - 8), то есть смотрит вниз. Прогрей её по возрастанию, от 21 до 548.
  4. Напечатай F(548).
from functools import lru_cache

@lru_cache(100)
def F(n):
    if n >= 21:
        return F(n - 8) + 1095
    if n < 21:
        return 10 * (G(n - 7) - 36)

@lru_cache(100)
def G(n):
    if n >= 22560:
        return n // 23 + 33
    if n < 22560:
        return G(n + 11) - 4

for n in range(22560, 5, -1):
    G(n)
for n in range(21, 549):
    F(n)
print(F(548))