Python递归错误:递归错误:调用Python对象时超出了最大递归深度

2024-04-24 23:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试构建一个函数,该函数将接受一个数字,然后使用递归打印出一个斐波那契序列,并在该数字上结束该序列。因此,如果我有一个从0开始的序列,并且1如果用户输入是4,它将返回01123。我得到这个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))

Tags: 函数用户returnobject序列数字numdepth
3条回答

两个问题

您的代码有两个问题:

  • 有一个无限循环,它生成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的大小写(参见here)。
或者只是调试代码,您会意识到循环永远不会以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

试试所有这些例子here

fib的第二个调用就是问题所在。通过基本情况(退出条件)并继续无止境地递归。这将生成递归错误

# to fix, replace "if n == 0:" with:

if n == 0 or n == 1:

发生错误是因为您对斐波那契使用了错误的规则。。。规则说初始数字是1和2,但您编写的代码是从0开始的。更改您的代码:

num = input("Give me a number.")
def fib(num):
    n = int(num)
    if n == 1 or n == 2: # Changed here
        return 1
    return fib(n - 1) + fib(n - 2)

print(fib(num))

相关问题 更多 >