Tail recursion
An iterative process like:
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
is only efficient if storage does not increase with progressive recursive calls to itself. Increasing storage is not actually necessary since all required information about the state of computation is present in the function arguments.
An evaluator that executes such iterative processes without growing memory usage is said to be tail recursive. Essentially, the idea is that control should directly pass to the last statement in a sequence of expressions without needing to return to the original caller. A relatively minor optimization for regular function calls, but hugely impactful for such iterative processes.
Links