Python如何处理无限递归?

Cof*_*ker 3 python recursion infinite

因此,当玩弄Python时,我注意到程序的堆栈大小基本上没有限制(在数字上继续执行电源操作,即使在达到数千个数字后,精度也保持完美).这让我想知道:如果我不小心进入Python的无限递归循环怎么办?编译器会注意到并抛出堆栈溢出错误吗?或者程序会崩溃吗?我的CPU会燃烧吗?老实说,这不是我渴望测试自己的东西.

Rus*_*ove 6

我保证,由于用户代码,没有现代计算机会燃烧.亲自尝试一下:

def recurseInfinitely( n ):
    recurseInfinitely(n+1)

recurseInfinitely(0)
Run Code Online (Sandbox Code Playgroud)

运行此程序会立即生成输出:

  [...]
    recurseInfinitely(n+1)
  File "so.py", line 2, in recurseInfinitely
    recurseInfinitely(n+1)
  File "so.py", line 2, in recurseInfinitely
    recurseInfinitely(n+1)
RuntimeError: maximum recursion depth exceeded   
Run Code Online (Sandbox Code Playgroud)

您可以捕获错误并检查以下值n:

def recurseInfinitely( n ):   
    try:
        recurseInfinitely(n+1)
    except RuntimeError:
        print "We got to level %s before hitting the recursion limit."%n
Run Code Online (Sandbox Code Playgroud)

得到:

在达到递归限制之前,我们达到了997级.