我在python版本3.4.1上,当我运行代码时:
def fibo(n):
if n == 1 or n ==2:
return 1
else:
return fibo(n-1)+fibo(n-2)
print("input number for fibonacci seq list")
num = int(input())
for i in range(0,num):
print(str(fibo(i)))
我希望代码能够给出一个用户输入的斐波那契数字列表,但是我得到了标题中提到的错误。我不知道为什么。
答案 0 :(得分:3)
我不确定为什么。
让我解释一下发生了什么。
在这一部分:
for i in range(0,num):
print(str(fibo(i)))
传递给i
的第一个号码fibo
为0
,因为range(0,num)
从0
开始。在fibo
内,0
未通过n == 1 or n ==2
条件,因此执行了fibo(n-1)
。现在该数字为-1
,因为0 - 1 == -1
。此数字也未通过n == 1 or n ==2
条件,并再次执行fibo(n-1)
。现在数字为-2
。
希望你知道这是怎么回事。数字无限减少,直到fibo
达到Python的最大递归深度,从而引发错误。
答案 1 :(得分:0)
首先尝试计算导致无限递归的fibo(0) - 做范围(1,n)'
答案 2 :(得分:0)
Fibonacci递归几何增加。最好使用迭代或生成器。
这是一个发电机:
>>> def fibgen():
... a,b=1,1
... while True:
... yield a
... a,b=b,a+b
...
>>> i = fibgen()
>>> next(i)
1
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
5
>>> i=fibgen()
>>> [next(i) for _ in range(10)]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]