Sno*_*pix 0 python memoization
所以我试图在 python fibonacci(n)函数中进行记忆。
def fib(n, memo = [None] * (fibn+1)):
if memo[n] != None: return memo[n]
if n <= 2: return 1
memo[n] = fib(n-1) + fib(n-2)
return memo[n]
Run Code Online (Sandbox Code Playgroud)
我正在尝试找到一种方法来存储我已经计算出的值的解决方案。我的临时解决方案是创建一个列表memo = [None] * (fibn+1),如果计算出新值:memo[n] = fib(n)。我遇到的问题是列表大部分是空的并且总体效率非常低。我想从此走下去
memo = [None, 1, None, 2, None, None, etc...]
像这样的事情
memo = {
3: 2
4: 3
7: 13
}
Run Code Online (Sandbox Code Playgroud)
这就像Java中的对象一样。
Python 提供了装饰器,可以在模块中自动为您缓存结果functools:
from functools import lru_cache
@lru_cache
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
return fib(n - 1) + fib(n - 2)
Run Code Online (Sandbox Code Playgroud)