我尝试构建如下功能:
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))
所以问题是我不完全理解为什么在处理两个函数时哪个有区别?递归深度超过错误,第二不?
答案 0 :(得分:0)
在以下情况下会出现问题:
会发生什么?
首先,n!= 0,因此将跳过第一个if语句。
但是,m = 0,因此第一个elif语句被接受。返回什么?
因此提出了完全相同的问题,过程重新开始,永不结束。
在更新的代码中,您要求n-1,因此n会慢慢减小,直到它为0,然后第一个if语句被接受,之后程序终止。