我正在创建一个装饰器来说明记忆。对于大多数人来说,我使用的是递归定义的 Fibonacci 函数。
我知道命名函数的记忆版本与原始版本不同会导致效率低下,因为递归调用将激活未记忆的函数。(参见这个老问题,Memoization python 函数)
我的问题是我似乎找不到正确的语法来覆盖导入函数的名称。
from fibonacci import fibonacci
def with_memoization(function):
past_results = {}
def function_with_memoization(*args):
if args not in past_results:
past_results[args] = function(*args)
return past_results[args]
return function_with_memoization
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)
fib = with_memoization(fib)
fibonacci = with_memoization(fibonacci)
print(fib(100)) # completes in <1 second
print(fibonacci(100)) # completes in >2 minutes, probably hours
这里导入的斐波那契函数和fib函数是一样的。我错过了什么?
aluckdog
相关分类