【发布时间】:2019-07-03 14:00:13
【问题描述】:
我尝试构建一个函数如下:
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))
所以问题是我不完全理解处理两个函数的哪个区别为什么第一个函数得到最大值。递归深度超出错误,第二个不是?
【问题讨论】:
-
查看此链接youtu.be/i7sm9dzFtEI。您的第一个算法与此类似。
-
您的第二个基本情况似乎是错误的。对于
a(1, 0),它应该调用a(0, 1)。那是a(0+1, 0) = a(0, 1) = 1 + 1。我们可以看到这应该被第一个基本情况捕获。但相反,它进入了递归案例——这是你无限递归的原因。