ANSHENG'S BLOG
修复Python递归超出最大深度
# pythonpublishDate · 2019-05-10 / lastEditedTime · 2022-04-06 04:49:00

刚用Python写了一个递归小程序,功能主要是像函数(print_n(n))传入一个n值,然后输出1-n,例如下面的代码:

def print_n(n): if n: print_n(n - 1) print(n)

当我在ipython中进行调试的时候,N为10000时,会抛出RecursionError: maximum recursion depth exceeded的错误

In [1]: def print_n(n): ...: if n: ...: print_n(n - 1) ...: print(n) ...: In [2]: print_n(10000) --------------------------------------------------------------------------- RecursionError Traceback (most recent call last) <ipython-input-2-085ca2d6a389> in <module> ----> 1 print_n(10000) <ipython-input-1-ae5822a69b3f> in print_n(n) 1 def print_n(n): 2 if n: ----> 3 print_n(n - 1) 4 print(n) 5 ... last 1 frames repeated, from the frame below ... <ipython-input-1-ae5822a69b3f> in print_n(n) 1 def print_n(n): 2 if n: ----> 3 print_n(n - 1) 4 print(n) 5 RecursionError: maximum recursion depth exceeded

这其实是因为Python限制了递归的深度,可以用过sys.getrecursionlimit()查看限制的深度

In [3]: import sys In [4]: sys.getrecursionlimit() Out[4]: 3000

可以看到,默认的限制是3000,当然我们也可以修改这个限制,通过sys.setrecursionlimit方法

In [5]: sys.setrecursionlimit(20000) In [6]: sys.getrecursionlimit() Out[6]: 20000

这会将默认限制增加到20000,然后我们再次调用print_n函数

In [7]: print_n(10000) ... 10000

最终,解决了我们的问题。