【问题标题】:Fibonacci Memoization in PythonPython中的斐波那契记忆
【发布时间】:2019-06-04 16:54:39
【问题描述】:

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

【问题讨论】:

  • 你实际上并没有从你的函数中返回任何东西。
  • 你的函数没有return 任何东西。所以fib3(n-1) + fib3(n-2) 没有意义,因为你是在对 2 个 void 值求和。
  • 又名table[n] = None + None
  • 你需要返回table[n]
  • 感谢您的帮助。我认为 table 是全局的,因为它是在函数之外声明的

标签: python fibonacci memoization


【解决方案1】:

您没有明确返回任何内容,因此您的 fib3 函数会自动返回 None。因此,您的table[n] = fib3(n-1) + fib3(n-2) 行的计算结果为table[n] = None + None,并且没有为None 定义+ 运算符。

【讨论】:

  • None 是单例,没有复数。
  • @TheIncorrigible1 在技术上是正确的,这是最好的正确方式!会更新。也投票关闭,因为它本质上是一个错字。
  • 这是最能帮助我理解问题的评论。谢谢。
【解决方案2】:

你错过了返回 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

【讨论】:

    猜你喜欢
    • 2015-06-16
    • 2015-10-19
    • 2011-12-14
    • 1970-01-01
    • 2020-08-19
    • 2021-11-17
    • 2018-11-09
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多