# Рекурсия с внутренним кэшированием
def factorial_recursive(n, cache={}):
if n < 2:
return 1
if n not in cache:
cache[n] = n * factorial_recursive(n-1)
return cache[n]
# Мемоизация с использованием словаря
def factorial_memoization(n, cache={}):
if n < 2:
return 1
if n not in cache:
cache[n] = n * factorial_memoization(n-1, cache)
return cache[n]
# Обычная итерация
def factorial_iteration:
result = 1
for i in range(2, n+1):
result *= i
return result
# Тестирование времени выполнения для каждого подхода
n = 1000
start = time.time()
factorial_recursive
end = time.time()
print(f"Время выполнения рекурсии с внутренним кэшированием: {end - start}")
start = time.time()
factorial_memoization
end = time.time()
print(f"Время выполнения мемоизации с использованием словаря: {end - start}")
start = time.time()
factorial_iteration
end = time.time()
print(f"Время выполнения обычной итерации: {end - start}")