Почему декоратор functools.cache не работает с моей функцией последовательности Фибоначчи с запоминанием?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему декоратор functools.cache не работает с моей функцией последовательности Фибоначчи с запоминанием?

Сообщение Anonymous »

Я возился с мемоизацией в Python и использовал в качестве модели пример функции последовательности Фибоначчи. Я написал первую функцию fibonacci() как обычную функцию без мемоизации, и она работает как положено. Затем я написал свою функцию fibonacci_memo(), которая использовала мемоизацию с использованием словаря входных и выходных данных, и она работала, как и ожидалось. Затем я захотел протестировать декоратор кэша functools, чтобы увидеть, достиг ли он того же эффекта, которого я ожидал. Итак, я скопировал исходную функцию fibonacci(), которая не использовала мемоизацию, и добавил к ней декоратор @cache. Результат был неожиданным, однако, похоже, он работает так же, как и исходная функция fibonacci(), которая не использовала мемоизацию.
Могу ли я неправильно понять полезность декоратора? или мемоизация вообще? Код приведен ниже, любая помощь приветствуется!
from functools import cache

def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(23))
# instant, works as expected

def fibonacci_memo(n, memo:dict={}):
if n == 0:
return 0
elif n == 1:
return 1
if n in memo:
return memo[n]
memo[n] = fibonacci_memo(n - 1, memo) + fibonacci_memo(n - 2, memo)
return fibonacci_memo(n - 1, memo) + fibonacci_memo(n - 2, memo)

print(fibonacci_memo(500))
# instant, works as expected

@cache
def fibonacci_functools(n): # identical to first, basic fibonacci function
if n == 0:
return 0
elif n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci_functools(500))
# slow, shouldn't it be te same as fibonacci_memo()??


Подробнее здесь: https://stackoverflow.com/questions/788 ... e-function
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»