Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 斐波那契错误:比较中超过最大递归深度_Python_Recursion - Fatal编程技术网

Python 斐波那契错误:比较中超过最大递归深度

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))) 我想让代码给我一个用户输

我使用的是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)))
我想让代码给我一个用户输入的斐波那契数列表,但我得到了标题中提到的错误。我不知道为什么

我不知道为什么

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

在本部分:

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