双重递归-RuntimeError:最大递归深度超出错误

时间:2019-02-09 15:00:17

标签: python recursion

我尝试构建如下功能:

  

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))

所以问题是我不完全理解为什么在处理两个函数时哪个有区别?递归深度超过错误,第二不?

1 个答案:

答案 0 :(得分:0)

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

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

会发生什么?

首先,n!= 0,因此将跳过第一个if语句。

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

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

因此提出了完全相同的问题,过程重新开始,永不结束。

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