Python中递归函数的斐波那契级数

Python中递归函数的斐波那契级数,python,python-3.x,Python,Python 3.x,您好,我正在尝试使用python中的递归函数生成斐波那契级数 这是我的密码 def fibolist(n): list1 = [1, 1] if n in (1,2) : return list1 else: fibolist(n-1).append(sum(fibolist(n-1)[n-3:])) return list1 但当我输入任何数字作为参数时,结果是[1,1] 你能帮帮我吗 你从 list1 = [1, 1]

您好,我正在尝试使用python中的递归函数生成斐波那契级数

这是我的密码

def fibolist(n):
    list1 = [1, 1]
    if n in (1,2) :
        return list1
    else:
        fibolist(n-1).append(sum(fibolist(n-1)[n-3:]))
        return list1
但当我输入任何数字作为参数时,结果是
[1,1]
你能帮帮我吗

你从

list1 = [1, 1]
您永远不会更改该值,然后将其返回到调用例程

fibolist
的每次调用都有一个名为
list1
的局部变量;追加到1不会更改调用程序中的
list1
值。您需要明确地这样做。试一试

else:
    return fibolist(n-1) + [sum(fibolist(n-1)[n-3:])]
只是为了修复您的代码:

def纤维列表(n):
如果n在(0,1)中:
返回[1,1]
其他:
返回fibolist(n-1)+[和(fibolist(n-1)[n-2:])]
几点注意:

python中的列表的起始索引为0,因此最好从它开始(除非您想将(1,2)中的
n的起始返回设置为
[0,1,1]


另外-如前所述,您不应该返回在每次go中预先分配的局部变量。

您的代码没有更新从递归返回的list1变量。执行
fibolist(n-1)。追加(…)
更新下一级返回的列表,但这是一个单独的列表,因此
list1
不受影响

通过将最后两个值传递给函数本身,也可以使函数更简单:

def fibo(n,a=1,b=1): return [a] if n==1 else [a] + fibo(n-1,b,a+b)
顺便说一句,斐波那契序列的现代解释是从0,1开始的,而不是1,1,因此上面的签名应该是
def fibo(n,a=0,b=1)

输出:

print(fibo(5))
#[1, 1, 2, 3, 5]

试试这个。。。我建议您阅读以下文章:您从不更新列表1,因此它将始终是[1,1]。即使在递归调用fibolist时,也需要更改列表1或对其执行某些操作并返回该值。非常感谢,这是一个很大的帮助!:)非常感谢,这是一个很大的帮助!:)