我正在尝试实现自下而上的fibonacci版本,该版本在O(n)时间运行,但不断获得列表分配索引错误,我不知道为什么。这是我的代码:
def fibbu(n):
fib = [1,1]
for i in range(2, n):
fib[i] = fib[i-2] + fib[i-1]
return fib[n]
但是我在for循环内部的行上得到了一个indexerror。我在这么简单的事情上花了太长时间,有人能指出我出错的地方吗?
答案 0 :(得分:2)
这将有效:
def fibbu(n):
fib = [1,1]
for _ in range(2, n):
fib.append(fib[-2] + fib[-1])
return fib[-1]
你有两个元素的列表,并且你试图修改第三个元素,因此是异常。在上面的代码中,我们将新元素附加到列表的末尾。索引-1
表示最后一个元素,-2
表示倒数第二个元素。请注意,您实际上不再需要i
,而是引用列表相对于其结尾的元素。