Алгоритм вычисления функций 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 ≥ 22 560;
G(n) = G(n + 11) − 4, если n < 22 560.
Чему равно значение функции F(548)?
Решение на Python:
🔹 Шаг 1. Подключение кэширования
from functools import lru_cache
@lru_cache(None)
📌 Результат: подключается декоратор lru_cache, который запоминает уже вычисленные значения функции. Это нужно, чтобы не считать одно и то же много раз — иначе программа работала бы очень медленно.
🔹 Шаг 2. Описание функции G(n)
def g(n):
return _g[n]
📌 Результат: функция G(n) реализует условия задачи.
если n >= 22560, возвращается n // 23 + 33
если n < 22560, возвращается G(n + 11) - 4
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 3. Описание функции F(n)
def f(n):
if n < 21:
return 10 * (g(n - 7) - 36)
return f(n - 8) + 1095
📌 Результат: функция F(n) реализует условия задачи.
если n >= 21, возвращается F(n - 8) + 1095
если n < 21, возвращается 10 * (G(n - 7) - 36)
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 4. Предварительный вызов функций
for n in range(22571, -1, -1):
if n >= G_LIMIT:
_g[n] = n // 23 + 33
else:
_g[n] = _g[n + G_STEP] - 4
📌 Результат: предварительный прогон заполняет кэш вычисленными значениями функций.
🔹 Шаг 5. Вычисление и вывод результата
print(f(548))
📌 Результат: итоговое значение выражения F(548) выводится на экран — ответ задачи: 50.