程序显示除输入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] = 0
、f[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)]