A recursão não é intrinsecamente melhor ou pior que os loops - cada um tem vantagens e desvantagens, e esses até dependem da linguagem de programação (e implementação).
Tecnicamente, os loops iterativos ajustam-se melhor aos sistemas de computador típicos no nível do hardware: no nível do código da máquina, um loop é apenas um teste e um salto condicional, enquanto a recursão (implementada ingenuamente) envolve empurrar um quadro de pilha, pular, retornar e recuar. da pilha. OTOH, muitos casos de recursão (especialmente aqueles que são trivialmente equivalentes a loops iterativos) podem ser escritos para que a pilha push / pop possa ser evitada; isso é possível quando a chamada de função recursiva é a última coisa que acontece no corpo da função antes de retornar e é comumente conhecida como otimização de chamada de cauda (ou otimização de recursão de cauda ). Uma função recursiva otimizada para chamada de cauda adequadamente é equivalente a um loop iterativo no nível do código da máquina.
Outra consideração é que os loops iterativos exigem atualizações de estado destrutivas, o que os torna incompatíveis com a semântica da linguagem pura (sem efeitos colaterais). Essa é a razão pela qual linguagens puras como Haskell não possuem construções de loop, e muitas outras linguagens de programação funcional não as possuem completamente ou as evitam o máximo possível.
Porém, a razão pela qual essas perguntas aparecem tanto nas entrevistas é que, para respondê-las, você precisa de um entendimento completo de muitos conceitos vitais de programação - variáveis, chamadas de função, escopo e, naturalmente, loops e recursão - e você tem trazer a flexibilidade mental para a mesa que permite abordar um problema de dois ângulos radicalmente diferentes e mover-se entre diferentes manifestações do mesmo conceito.
A experiência e a pesquisa sugerem que existe uma linha entre as pessoas que têm a capacidade de entender variáveis, indicadores e recursão e as que não. Quase todo o resto em programação, incluindo estruturas, APIs, linguagens de programação e seus casos extremos, pode ser adquirido através do estudo e da experiência, mas se você não conseguir desenvolver uma intuição para esses três conceitos principais, não poderá ser um programador. Traduzir um loop iterativo simples para uma versão recursiva é a maneira mais rápida possível de filtrar os não programadores - mesmo um programador inexperiente pode fazê-lo em 15 minutos e é um problema muito independente da linguagem, para que o candidato possa escolher uma língua de sua escolha em vez de tropeçar em idiossincrasias.
Se você receber uma pergunta como essa em uma entrevista, é um bom sinal: significa que o possível empregador está procurando pessoas que possam programar, não pessoas que memorizaram o manual de uma ferramenta de programação.