Recursive procedure that can be written as a loop; it typically uses an extra variable to calculate a result on the fly