• 尾递归,


    总所周知,尾递归是一种特殊的递归;因为这一次递归返回的下一次的结果,所以避免了递归栈,对于空间上来讲是一种节省。

    所有的递归都有非递归来书写,尾递归也可以达到和非递归相同的结果。

    但是python是不支持尾递归的,因为要返回错误栈和错误类型。

    python 默认的递归栈大小可以通过以下获得

    sys.getrecursionlimit()

    python 可以设置递归栈的大小

    sys.setrecursionlimit()

    但是今天的我大开眼界。

    https://www.cnblogs.com/Alexander-Lee/archive/2010/09/16/1827587.html

    import sys  
      
    class TailRecurseException:  
      def __init__(self, args, kwargs):  
        self.args = args  
        self.kwargs = kwargs  
      
    def tail_call_optimized(g):  
      """  
      This function decorates a function with tail call  
      optimization. It does this by throwing an exception  
      if it is it's own grandparent, and catching such  
      exceptions to fake the tail call optimization.  
        
      This function fails if the decorated  
      function recurses in a non-tail context.  
      """  
      def func(*args, **kwargs):  
        f = sys._getframe()  
        if f.f_back and f.f_back.f_back and f.f_back.f_back.f_code == f.f_code:  
          raise TailRecurseException(args, kwargs)  
        else:  
          while 1:  
            try:  
              return g(*args, **kwargs)  
            except TailRecurseException, e:  
              args = e.args  
              kwargs = e.kwargs  
      func.__doc__ = g.__doc__  
      return func  

    大意是通过不断的捕获错误规避了递归栈。6的一批,大开眼界。

  • 相关阅读:
    参考文献
    Redis安装以及常见错误
    Linux下搭建Mysql主从遇到的问题
    Linux中创建虚拟环境安装问题
    python 二分查找算法
    python 递归函数
    python 内置函数
    python 装饰器
    初识正则表达式
    内置函数***
  • 原文地址:https://www.cnblogs.com/mangmangbiluo/p/13063088.html
Copyright © 2020-2023  润新知