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.