标签:style blog class code java color
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.
What is tail-recursion,布布扣,bubuko.com
标签:style blog class code java color
原文地址:http://www.cnblogs.com/yuyutianxia/p/3715747.html