首页 > 解决方案 > Python 递归错误:RecursionError:调用 Python 对象时超出最大递归深度

问题描述

我正在尝试构建一个接收数字的函数,然后使用递归打印出斐波那契数列并结束数列。因此,如果我有一个开始的序列,0并且1如果用户输入是4,它将返回0, 1, 1, 2, 3。我得到这个RecursionError

RecursionError: maximum recursion depth exceeded while calling a Python object

这是我的代码:

num = input("Give me a number.")
def fib(n):
  n = int(n)
  if n == 0:
    return 1
  return fib(n - 1) + fib(n - 2)
print(fib(num))

标签: pythonrecursion

解决方案


两个问题

您的代码有两个问题:

  • 有一个无限循环,会产生RecursionError异常
  • 检索序列的所有项是不可能的(您说要打印所有序列,而不仅仅是最后一项)

无限循环

试试下面的代码。我只是添加n==1了另一个停止条件。

def fib(n):
    n = int(n)
    if n == 0 or n == 1:  # Changed here
        return 1
    return fib(n - 1) + fib(n - 2)

num = input("Give me a number: ")

print(fib(num))

根据定义,案例f(1)=1是必需的(请参见此处)。
或者只是调试你的代码,你会意识到循环永远不会结束,fib(1)因为它返回:
f(1-1) + f(1-2)>>> f(0) + f(-1)>>> 1 + infinite loop

打印所有条款

您可以尝试在递归代码中使用列表,这很棘手,或者可能更改为带有循环的版本。

带循环:

# A version using a while loop
# This code returns the list of terms
def fib(n):

    n=int(n)
    terms = []

    i=0
    while i<=n:
        if i==0 or i==1:
            terms.append(1)
        else:
            terms.append(terms[-2]+terms[-1])
        i+=1

    return terms

递归:

Working on it

在这里尝试所有这些示例


推荐阅读