我当前正在使用此代码:
def f():
try:
f()
except RecursionError:
f()
try:
f()
except RecursionError:
f()
这立即导致致命的堆栈溢出。但是,我想知道是否有更简单的方法来做到这一点,而这要比Pythonic多得多。 附言忽略缩进错误,很难在此处键入。
答案 0 :(得分:1)
import sys
sys.setrecursionlimit(10**8)
def ackermann(m,n):
if m == 0:
return (n + 1)
elif n == 0:
return ackermann(m - 1, 1)
else:
return ackermann(m - 1, ackermann(m, n - 1))
for x in range(5):
for y in range(5):
print(ackermann(x, y))
Python的默认递归限制为10 ** 4。可以通过setrecursionlimit()进行更改,因为Ackermann函数的输出太长,您会收到“堆栈溢出”错误。