Источник: Демо-2023
Алгоритм вычисления функции , где
– натуральное число, задан следующими соотношениями:
, если
, если
Чему равно значение выражения
?
Решение через рекурсию:
import sys
sys.setrecursionlimit(5000)
def f(n):
if n == 1: # Если n равно 1
return 1 # Возвращаем 1
# Иначе возвращаем рекурсивное выражение
return n * f(n - 1)
print(f(2023) / f(2020))
Решение через динамику:
f = [0]*5000 # Создается массив f длиной 5000, заполненный нулями,
# Который будет хранить значения факториалов
for n in range(1, 2050):
if n == 1: # Если n = 1, то присваивается начальное значение факториала
f[n] = 1
else: # Иначе вычисляется значение факториала для текущего n
f[n] = n * f[n-1]
print(f[2023] // f[2020])
Аналитическое решение:
Рассмотрим, что выполняет функция:
То есть функция считает факториал числа. Значит: