A transformation applied to functional programs to replace
recursion with iteration. A tail-recursive function can be
compiled to an iterative loop where the recursive call becomes
a jump back to the start and the parameters are held in
registers which are updated with new values each time around
the loop. See Iteration, Tail recursion optimisation.