在python中实现自下而上的斐波纳契

时间:2016-04-29 20:51:38

标签: python dynamic-programming fibonacci

我正在尝试实现自下而上的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。我在这么简单的事情上花了太长时间,有人能指出我出错的地方吗?

1 个答案:

答案 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,而是引用列表相对于其结尾的元素。