Fibonacci错误:相比之下超出了最大递归深度

时间:2014-10-23 18:12:27

标签: 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)))

我希望代码能够给出一个用户输入的斐波那契数字列表,但是我得到了标题中提到的错误。我不知道为什么。

3 个答案:

答案 0 :(得分:3)

  

我不确定为什么。

让我解释一下发生了什么。

在这一部分:

for i in range(0,num):
    print(str(fibo(i)))

传递给i的第一个号码fibo0,因为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]