>>1
Recursion makes the routine very concise and proof of correctness can be established very easily via induction on the number of recursive calls. Tail call elimination can be used to achieve the same efficiency and memory usage as plain iteration, but there is the freedom to jump to other modular functions. Using recursive calls that use stack space when it is not necessary is bad practice, and will likely cause a stack overflow for reasonable invocations. But it is ok as long as the amount of stack space used is the same as the amount a loop would require, either by allocating an array or using a stack of its own.