La recursión es a menudo una forma más natural de ver las cosas que la iteración. Por ejemplo, considere la posibilidad de atravesar un árbol binario: inorder(left); process(); inorder(right);
es mucho más simple que mantener explícitamente una pila.
Siempre y cuando no profundices demasiado (explotando la pila), la diferencia en el uso de recursos suele ser trivial. No te preocupes por eso en general. El código simple es normalmente mejor que el código optimizado a mano, aunque hay excepciones. Lo correcto es normalmente mejor que rápido.
Cualquier algoritmo recursivo puede expresarse como un algoritmo iterativo, pero es posible que deba mantener una pila explícita (correspondiente a la pila de llamadas que se maneja implícitamente). Después de todo, si compila una función recursiva, obtiene algo que depende de manipular una pila y recorrer la función, y eso es iterativo.
Las funciones recursivas de cola se pueden traducir fácilmente en bucles y no necesitan una pila, pero ese es un caso especial.