繁体   English   中英

Python中的斐波那契记忆

[英]Fibonacci Memoization in Python

我写了这段代码来计算第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)

这是我得到的错误,我认为是由非更新表引起的(因为table [n]始终= -1):

TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

您没有明确返回任何内容,因此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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM