首页 > 解决方案 > 双递归 - RuntimeError: 超出最大递归深度错误

问题描述

我试图构建一个函数如下:

a(0,m) = m+1
a(n+1,0) = a(n,1)
a(n+1,m+1) = a(n,a(n+1,m))

第一次尝试是:

def a(n,m):
    if n == 0:
        return m + 1
    elif m == 1:
        return a(n ,0)
    else:
        return a(n - 1, a(n, m - 1))

我得到了

RuntimeError:超出最大递归深度

所以第二次尝试就是这样,我工作了。

def a(n,m):
    if n == 0:
        return m + 1
    elif m == 0:
        return a(n-1 , 1)
    else:
        return a(n - 1, a(n, m - 1))

所以问题是我不完全理解处理两个函数的哪个区别为什么第一个函数得到最大值。递归深度超出错误,第二个不是?

标签: pythonrecursion

解决方案


在以下情况下会出现问题:

  • n != 0(例如:x)
  • 米 = 0

怎么了?

首先,n != 0,所以第一个 if 语句被跳过。

但是,m=0,所以第一个 elif 语句被接受。返回什么?

  • n 仍然不等于 0(它等于 x)
  • m 仍然等于 0

因此,提出了完全相同的问题,过程重新开始,永无止境。

在您更新的代码中,您要求 n-1,因此 n 会慢慢减少直到它为 0,并且第一个 if 语句被接受,之后程序终止。


推荐阅读