Python 斐波那契错误:比较中超过最大递归深度
我使用的是python版本3.4.1,运行代码时:Python 斐波那契错误:比较中超过最大递归深度,python,recursion,Python,Recursion,我使用的是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))) 我想让代码给我一个用户输
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)))
我想让代码给我一个用户输入的斐波那契数列表,但我得到了标题中提到的错误。我不知道为什么
我不知道为什么
让我解释一下发生了什么事
在本部分:
for i in range(0,num):
print(str(fibo(i)))
传递给fibo
的第一个数字i
是0
,因为范围(0,num)
从0
开始。在fibo
内部,0
使n==1或n==2
条件失效,因此执行fibo(n-1)
。现在这个数字是-1
,因为0-1==-1
。该数字也不符合n==1或n==2
条件,并且再次执行fibo(n-1)
。现在号码是-2
希望你能看到这是怎么回事。这个数字会无限期地减少,直到
fibo
达到Python的最大递归深度,从而引发错误。您首先尝试计算fibo(0),这会导致无限递归-do'范围(1,n)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]
您输入的数字有多大?尝试了3 4 5这样的小案例。相同的错误或只需将
if语句设置为if n