如何在Python中获得堆栈溢出错误?

时间:2018-07-27 04:05:07

标签: python stack-overflow

我当前正在使用此代码:

def f():
    try:
        f()
except RecursionError:
      f()

try:
    f()
except RecursionError:
    f()

这立即导致致命的堆栈溢出。但是,我想知道是否有更简单的方法来做到这一点,而这要比Pythonic多得多。 附言忽略缩进错误,很难在此处键入。

1 个答案:

答案 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函数的输出太长,您会收到“堆栈溢出”错误。