首页 > 解决方案 > Python中记忆斐波那契数列的问题

问题描述

我正在用 Python 实现一个斐波那契数列。我使用了一个数组(“[]”)进行记忆,但我得到了一个IndexError: list assignment index out of range.

但是,使用对象 ("{}") 可以正常工作。有什么不同?

代码

def fib(n):
    if n <= 1:
        memo[n] = n

    if n not in memo:
        memo[n] = fib(n-2) + fib(n-1)

    return memo[n]


# memo = [] not work.
# memo = {} work.

print(fib(6))

标签: python

解决方案


当你做memo = []它没有任何元素。当你发送fib(2)它实际上在做

memo[2] = n

这将抛出一个错误列表索引超出范围,因为 memo 在索引2处没有任何元素

当你做memo = {}时,它会创建一个 dict 和

memo[2] = n

将添加一个值为n的新键2。像这样:

memo = {
  2: n
}

推荐阅读