我想在Python中编写一个递归函数来计算斐波那契数列。
x
将是起始点,y
将是x
的后续项,l
是长度。
我不明白我的思路错误在哪:
def fib(x, y, l, fibList=None):
fibList = []
z = x + y
x = y
fibList.append(z)
y = z
if len(fibList) <= l:
return fib(x, y, l, fibList)
else:
return(fibList)
结果如下:
RecursionError: maximum recursion depth exceeded while calling a Python object
我可以用循环解决它,但不能用递归函数。
x
、y
、l
和fibList
的值是否符合预期,建议在进入函数时将它们打印出来。请注意不改变原意,使翻译易于理解。 - jarmod0
项开始,然后是两个1
项。没有办法调用您的函数以产生前两个项。例如,要获得零,唯一的方法是将x
和y
都传入0
,这当然不会导致序列中每个项的正确生成。请参阅我的答案,它解决了这个问题以及无限递归问题,并为您的函数提供了一个模块,使其更易于调用。 - CryptoFool