我想存储到目前为止计算出的最大的fib数,但是最大的变量没有被正确分配。
cache = {}
biggest = 1
def fib(n):
if n == 0:
return 0
if n == 1:
return 1
if not n in cache:
cache[n] = fib(n-1) + fib(n-2)
print "calculated %ith fib giving %i" %(n, cache[n])
biggest = cache[n]
return cache[n]
做完fib(10)后,缓存看起来不错,但最大的仍然是1.抱歉初学者的问题,但是希望有人可以启发我。谢谢!
答案 0 :(得分:3)
您需要使用global
statement将biggest
声明为全局(特别是在对变量进行赋值时)。否则,它被视为局部变量。
cache = {}
biggest = 1
def fib(n):
global biggest # <-----
....
答案 1 :(得分:0)
如果您某天在Python&gt; = 3.2中执行此操作,您还可以使用lru_cache
from functools import lru_cache
@lru_cache()
def fibo(n):
if n <= 1:
return 1
return fibo(n-1) + fibo(n-2)
lru_cache
允许您按照您尝试的方式缓存完全某些内容,但会自动,更快,并且您无需执行任何操作。只是使用这个装饰。
<强> Documentation here 强>