Алгоритм вычисления значения , где
— целое неотрицательное число, задан следующими соотношениями:
, при
или
при
Найдите чему равно значение
Динамическое решение
f = [0] * 5000 # Создаём список для хранения значений функции f(n)
# Задаём известные значения для некоторых n
f[0] = 1
f[1] = 1
for n in range(2, 2025): # Перебор других значений n
f[n] = f[n - 1] * n # при n > 1
print(f[2023] // f[2022]) # Вывод результата
Рекурсивное решение
from functools import lru_cache
# Подключаем кеширование всех результатов функции
@lru_cache(None) # None - количество кеширований не ограничено
def F(n):
if n == 0 or n == 1:
return 1
else:
return F(n - 1) * n
for n in range(2500): # Перебираем значения n
F(n) # Вызываем функцию, чтобы значение было посчитано и закешировано
# Данные значения уже будут посчитаны в цикле и сохранены в кеш,
# так что превышения глубины рекурсии не возникнет
print(F(2023) // F(2022))
Аналитическое решение
Функция вычисляет факториал, т.е. произведение всех чисел от 1 до n.
То есть
Значит, после деления у нас останется только число 2023.