A recursão geralmente é uma maneira mais natural de ver as coisas do que a iteração. Por exemplo, considere a passagem inorder de uma árvore binária: inorder(left); process(); inorder(right);
é muito mais simples do que manter explicitamente uma pilha.
Enquanto você não for muito fundo (explodindo a pilha), a diferença no uso de recursos é geralmente trivial. Não se preocupe com isso em geral. O código simples é normalmente melhor que o código otimizado à mão, embora haja exceções. Certo é normalmente melhor que rápido.
Qualquer algoritmo recursivo pode ser expresso como um algoritmo iterativo, mas pode ser necessário manter uma pilha explícita (correspondente à pilha de chamadas manipulada implicitamente). Afinal, se você compilar uma função recursiva, obtém algo que depende da manipulação de uma pilha e do loop da função, e isso é iterativo.
Funções recursivas de cauda podem ser facilmente traduzidas em loops e não precisam de uma pilha, mas esse é um caso especial.