zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    [转] 关于hibernate的缓存使用
    周鸿祎,我的互联网方法论
    cwRsync window下的跨服务器的文件同步
    一个代价11万的bug
    批处理备份
    NodeJs环境部署
    spring接收参数
    @Autowired
    谈谈把网站迁移到阿里云的一些感想和其中遇到的一些问题
    HTML5+JS 《五子飞》游戏实现(一)规则
  • 原文地址:https://www.cnblogs.com/wozijisun/p/5642540.html
Copyright © 2011-2022 走看看