(Иглин К.) Алгоритм вычисления значения функции F(n) и G(n), где n - целое число, задан следующими соотношениями:
G(n) = n, если n < 100.
G(n) = F(n − 3) + 1, если n ≥ 100.
F(n) = G(n − 2);
Чему равно значение выражения F(5000).
Решение на Python:
🔹 Шаг 1. Подключение кэширования
from functools import lru_cache
@lru_cache(None)
📌 Результат: подключается декоратор lru_cache, который запоминает уже вычисленные значения функции. Это нужно, чтобы не считать одно и то же много раз — иначе программа работала бы очень медленно.
🔹 Шаг 2. Описание функции G(n)
def g(n):
if n < 100:
return n
return f(n - 3) + 1
📌 Результат: функция G(n) реализует условия задачи.
если n < 100, возвращается n
если n >= 100, возвращается F(n - 3) + 1
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 3. Описание функции F(n)
def f(n):
return g(n - 2)
📌 Результат: функция F(n) реализует условия задачи.
Это
рекурсивная функция, если она обращается к себе или к другой функции.
🔹 Шаг 4. Предварительный вызов функций
for i in range(10, 5001):
g(i)
f(i)
📌 Результат: функции вызываются для значений от 10 до 5000. Все значения заранее вычисляются и сохраняются в кэше — дальнейшие обращения будут мгновенными.
🔹 Шаг 5. Вычисление и вывод результата
print(f(5000))
📌 Результат: итоговое значение выражения F(5000) выводится на экран — ответ задачи: 1078.