python中的斐波那契序列程序运行良好,但输入0除外

python中的斐波那契序列程序运行良好,但输入0除外,python,fibonacci,Python,Fibonacci,除输入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)) def fib(n)

除输入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))
def fib(n):
f=列表()
i=0

(i)p> >中间的两行,因为在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):
f=[]
i=0
而(i任何一种鸭子类型它:

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]

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

def fib(n):
    if 0<=n<2: return n
    else: return fib(n-2)+fib(n-1)
使用列表获取第i项或列出所有x fibonacci值

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

@如果不是的话!你为什么会这样想?(也测试了这个)当n=0时,你在f的位置1没有值,但是你的句子试图读取在该位置f[1]=1的te值。可能你被字典弄糊涂了。顺便说一句,试着在你的Python代码中遵循PEP8。
def fib(n):
    if 0<=n<2: return n
    else: return fib(n-2)+fib(n-1)
fib(i)
[fib(i) for i in range(x)]