La ricorsione è spesso un modo più naturale di guardare le cose rispetto all'iterazione. Ad esempio, considera l'attraversamento inorder di un albero binario: inorder(left); process(); inorder(right);
è molto più semplice rispetto al mantenimento esplicito di uno stack.
Fintanto che non vai troppo in profondità (soffia la pila), la differenza nell'uso delle risorse è solitamente banale. Non preoccuparti di questo in generale. Il codice semplice è normalmente migliore del codice ottimizzato a mano, sebbene ci siano delle eccezioni. Destra è normalmente meglio che veloce.
Qualsiasi algoritmo ricorsivo può essere espresso come un algoritmo iterativo, ma potrebbe essere necessario mantenere uno stack esplicito (corrispondente allo stack di chiamate gestito in modo implicito). Dopotutto, se si compila una funzione ricorsiva, si ottiene qualcosa che si basa sulla manipolazione di uno stack e sul looping della funzione, e questo è iterativo.
Le funzioni ricorsive di coda possono essere facilmente tradotte in loop e non richiedono uno stack, ma questo è un caso speciale.