Python 为什么这没有指定正确的值?

Python 为什么这没有指定正确的值?,python,recursion,fibonacci,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 = cac

我想存储迄今为止计算的最大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。对不起,这是一个初学者的问题,但我希望有人能启发我。谢谢

您需要将
最大值
声明为全局使用(特别是当变量有赋值时)。否则,它将被视为局部变量

cache = {}
biggest = 1

def fib(n):
    global biggest  # <-----
    ....
cache={}
最大值=1
def纤维(n):

全局最大#如果有一天您碰巧在Python>=3.2中这样做,您也可以使用
lru缓存

from functools import lru_cache

@lru_cache()
def fibo(n):
    if n <= 1:
        return 1
    return fibo(n-1) + fibo(n-2)
从functools导入lru\U缓存
@lru_缓存()
def fibo(n):

如果n为什么是全球性的?而OP已经在同一模块中使用了缓存,也可以访问它。@Anzel,
cache
用作只读。换句话说,没有分配给
缓存
<代码>缓存
被视为全局缓存。然而,有一个分配给
最大的
;考虑到当地(除非有全球声明)@Anzel,我更新了答案,提到了任务以澄清。谢谢你的反馈。啊,我知道这是从哪里来的,我以为操作码不起作用。它可以工作,但在调用函数后尝试打印最大的
。抱歉我没有花足够的精力Op正在使用Python2.x(使用
print
作为声明)。是从Python 3.2.0开始提供的。哦,天哪。。。好。这是一个问题。OP并不是在询问记忆。从技术上讲,在调用
fib(n)
之后,您返回的是最大值,这使得最大值有点多余。