What is tail-recursion
时间:2014-05-08 17:35:09
收藏:0
阅读:286
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.
评论(0)
