python - 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))
解决方案
当你做memo = []它没有任何元素。当你发送fib(2)它实际上在做
memo[2] = n
这将抛出一个错误列表索引超出范围,因为 memo 在索引2处没有任何元素
当你做memo = {}时,它会创建一个 dict 和
memo[2] = n
将添加一个值为n的新键2。像这样:
memo = {
2: n
}
推荐阅读
- c# - BooleanToVisibilityConverter 在 true 或 null 时转换为 Visible,在 false 时转换为 Collapsed
- react-native - 当前位置适用于 long 和 lat 空值,但不适用于 IOS?
- c# - 从多个 OledbConnections 动态填充和附加数据到一个 OleDbDataAdapter
- r - 变量作为 data.table 聚合列表中的名称
- javascript - 简单的 Javascript OOP 混淆
- php - 方法 some_method() 总是返回 false
- swift - 如何使用新的实时数据更新所有注入的对象
- javascript - 为什么我的端点的数据不会在成功的身份验证后显示在浏览器上?
- c - RMS 计算 DC 偏移
- dictionary - __repr__ 和 repr 有什么区别?