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)

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

  • 相关阅读:
    HTTPS安全超文本传输协议
    前端性能监控工具
    跨域:跨域及解决方法
    源码安装nginx
    浏览器工作原理(四):浏览器事件解读
    浏览器工作原理(三):js运行机制及Event Loop
    前端性能优化:gzip压缩文件传输数据
    Vue源码学习(零):内部原理解析
    netsh命令操作ipsec
    netsh命令操作防火墙
  • 原文地址:https://www.cnblogs.com/wozijisun/p/5642540.html
Copyright © 2011-2022 走看看