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

sha*_*hon 8 python stack-overflow

我目前使用这段代码:

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

try:
    f()
except RecursionError:
    f()
Run Code Online (Sandbox Code Playgroud)

这会立即导致致命的堆栈溢出。然而,我想知道是否有一种更简单、更Pythonic 的方法可以做到这一点。

小智 3

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)) 
Run Code Online (Sandbox Code Playgroud)

Python默认的递归限制是10**4。可使用 setrecursionlimit() 进行更改,这样您可能会收到“堆栈溢出”错误,因为 Ackermann 函数的输出太长。

  • 看起来过于复杂 (5认同)