Python中的斐波那契记忆
我编写这段代码是为了计算第n个斐波那契数,它可以工作(计算正确的数),但由于表没有更新而失败。有人知道为什么吗Python中的斐波那契记忆,python,fibonacci,memoization,Python,Fibonacci,Memoization,我编写这段代码是为了计算第n个斐波那契数,它可以工作(计算正确的数),但由于表没有更新而失败。有人知道为什么吗 # memoization n = 12 table = np.ones(n+1)*-1 def fib3(n): if table[n]==-1: if n<=2: table[n] = 1 else: table[n] = fib3(n-1)+fib3(n-2) #return t
# memoization
n = 12
table = np.ones(n+1)*-1
def fib3(n):
if table[n]==-1:
if n<=2:
table[n] = 1
else:
table[n] = fib3(n-1)+fib3(n-2)
#return table ##This was part of my original solution but I removed it because it wasn't working
fib3(12)
您没有显式返回任何内容,因此
fib3
函数自动返回None
。因此,您的行table[n]=fib3(n-1)+fib3(n-2)
计算结果为table[n]=None+None
,并且没有为None
定义+
运算符。您没有返回fib3函数的值
import numpy as np
# memoization
n = 12
table = np.ones(n+1)*-1
def fib3(n):
if table[n]==-1:
if n<=2:
table[n] = 1
else:
table[n] = fib3(n-1)+fib3(n-2)
return table[n]
fib3(12)
144
将numpy导入为np
#回忆录
n=12
表=np.一(n+1)*-1
def fib3(n):
如果表[n]=-1:
如果您实际上没有从函数返回任何内容,则函数不会返回任何内容。因此,fib3(n-1)+fib3(n-2)
没有意义,因为您正在对2个无效值求和。akatable[n]=None+None
您需要返回table[n]谢谢您的帮助。我认为表是一个全局表,因为它是在函数None
之外声明的,它是单例的,不是复数的。@TheIncorrigible1在技术上是正确的,这是最好的一种正确!将更新。我也投票决定结束,因为这基本上是一个打字错误。这是最有助于我理解这个问题的评论。谢谢
import numpy as np
# memoization
n = 12
table = np.ones(n+1)*-1
def fib3(n):
if table[n]==-1:
if n<=2:
table[n] = 1
else:
table[n] = fib3(n-1)+fib3(n-2)
return table[n]
fib3(12)
144