zoukankan      html  css  js  c++  java
  • What is tail-recursion

    Consider a simple function that adds the first N integers. (e.g. sum(5) = 1 + 2 + 3 + 4 + 5 = 15).

    Here is a simple Python implementation that uses recursion:

    def recsum(x):
     if x == 1:
      return x
     else:
      return x + recsum(x - 1)

    If you called recsum(5), this is what the Python interpreter would evaluate.

    recsum(5)
    5 + recsum(4)
    5 + (4 + recsum(3))
    5 + (4 + (3 + recsum(2)))
    5 + (4 + (3 + (2 + recsum(1))))
    5 + (4 + (3 + (2 + 1)))
    15

    Note how every recursive call has to complete before the Python interpreter begins to actually do the work of calculating the sum.

    Here's a tail-recursive version of the same function:

    def tailrecsum(x, running_total=0):
      if x == 0:
        return running_total
      else:
        return tailrecsum(x - 1, running_total + x)

    Here's the sequence of events that would occur if you called tailrecsum(5), (which would effectively be tailrecsum(5, 0), because of the default second argument).

    tailrecsum(5, 0)
    tailrecsum(4, 5)
    tailrecsum(3, 9)
    tailrecsum(2, 12)
    tailrecsum(1, 14)
    tailrecsum(0, 15)
    15

    In the tail-recursive case, with each evaluation of the recursive call, the running_total is updated.

  • 相关阅读:
    gns3 接口说明 转
    Java二进制指令代码解析
    java大神RednaxelaFX
    深入理解Java虚拟机
    java环境变量设置
    openjdk
    JAVA call graphs JAVA调用图
    Java虚拟机原理图解
    JAVA --BYTECODE
    利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码
  • 原文地址:https://www.cnblogs.com/yuyutianxia/p/3715747.html
Copyright © 2011-2022 走看看