斐波那契数列程序在python工作良好,除了输入0



程序显示除输入n=0以外的正确输出

def fib(n):
    f=list()
    i=0
    while(i<=n):
        f.append(i)
        i+=1
    f[0]=0
    f[1]=1
    for i in range(2,n+1):
        f[i]=f[i-1]+f[i-2]
        i+=1
    return f[n]
n=int(input())
print(fib(n))

当我输入n=0时,它显示以下错误:

Traceback (most recent call last):
    File "fib.py", line 16, in <module>
        print(fib(n))
    File "fib.py", line 10, in fib
        f[1]=1
    IndexError: list assignment index out of range

中间的两行是不必要的,因为您在while循环期间初始化了这些元素。错误来自于这样一个事实,对于n=0,你只向列表中添加了一个元素。在改变了第一个和第二个元素的值之后。没有第二个元素

def fib(n):
    f=[]
    i=0
    while(i<=n):
        f.append(i)
        i+=1
    for i in range(2,n+1):
        f[i]=f[i-1]+f[i-2]
        i+=1
    return f[n]
n=int(input())
print(fib(n))

输入:

def fib(n):
    if n in [0, 1]:
        return n
    .
    .

或将f[0] = 0f[1] = 1分别改为f.append(0)f.append(1)

您不需要这两行。

f[0]=0
f[1]=1

修改代码:

def fib(n):
    f=list()
    i=0
    while(i<=n):
        f.append(i)
        i+=1
    # HERE WAS THE MISTAKE
    f.append(0)
    f.append(1)
    for i in range(2,n+1):
        f[i]=f[i-1]+f[i-2]
        i+=1
    return f[n]

输出:

>>> fib(0)
0
>>> fib(1)
1
>>> fib(2)
1
>>> fib(3)
2
>>> fib(4)
3
>>> fib(5)
5
>>> fib(6)
8
>>> fib(7)
13
>>> fib(8)
21
>>> fib(9)
34
...
>>> fib(30)
832040

代码中的问题是循环没有创建索引为1的项,因此在循环之后您可以更改该项,因为它不存在。我建议在开始时"硬编码"0和1,然后使用递归来定义fibonacci函数

def fib(n):
    if 0<=n<2: return n
    else: return fib(n-2)+fib(n-1)
然后调用
fib(i)

获取第i项或使用列表推导式生成包含所有x个斐波那契值的列表

[fib(i) for i in range(x)]

最新更新