Python中递归的最大次数(转)2018-06-14

Python中递归的最大次数

实际应用中遇到了一个python递归调用的问题,报错如下:
RuntimeError: maximum recursion depth exceeded while calling a Python object
网上找了一下,原来Python确实有递归次数限制,默认最大次数为1000
在正常的python里:

In [1]: sys.setrecursionlimit? 
Type:   builtin_function_or_method 
Base Class: <type 'builtin_function_or_method'> 
String Form:    <built-in function setrecursionlimit> 
Namespace:  Interactive 
Docstring: 
     setrecursionlimit(n) 
      
     Set the maximum depth of the Python interpreter stack to  
n.  This limit prevents infinite recursion from causing an  
overflow of the C stack and crashing Python.  The highest  
possible limit is platform-dependent. 

那么如何进行判断处理呢?下面给出两段代码,供参考。
代码如下:

def recursion(n): 
    if(n <= 0): 
        return 
        print n 
    recursion(n - 1) 

if __name__ == "__main__":
    recursion(1000)

当在我自己的机器运行以上代码时,发现最多能打印到998,然后就会抛出 “RuntimeError: maximum recursion depth exceeded” 的错误了。 嘿,还真有限制。但转念一想,python不会这么弱吧。经过一番查找,发现这是python专门设置的一种机制用来防止无限递归造成Python溢出崩溃, 最大递归次数是可以重新调整的。 (http://docs.python.org/2/library/sys.html#sys.setrecursionlimit),修改代码如下:

import sys
sys.setrecursionlimit(1500) # set the maximum depth as 1500

def recursion(n): 
    if(n <= 0): 
        return 
        print n 
    recursion(n - 1) 

if __name__ == "__main__":
    recursion(1200)

再次运行,顺利通过!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容