为什么这不能分配正确的值?

时间:2014-12-31 01:35:37

标签: python recursion fibonacci

我想存储到目前为止计算出的最大的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.抱歉初学者的问题,但是希望有人可以启发我。谢谢!

2 个答案:

答案 0 :(得分:3)

您需要使用global statementbiggest声明为全局(特别是在对变量进行赋值时)。否则,它被视为局部变量。

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