Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的斐波那契记忆_Python_Fibonacci_Memoization - Fatal编程技术网

Python中的斐波那契记忆

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

我编写这段代码是为了计算第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 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个无效值求和。aka
table[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