La recursión no es intrínsecamente mejor o peor que los bucles: cada uno tiene ventajas y desventajas, y estos incluso dependen del lenguaje de programación (y la implementación).
Técnicamente, los bucles iterativos se ajustan mejor a los sistemas informáticos típicos a nivel de hardware: a nivel de código de máquina, un bucle es solo una prueba y un salto condicional, mientras que la recursión (implementada ingenuamente) implica empujar un marco de pila, saltar, regresar y retroceder de la pila OTOH, se pueden escribir muchos casos de recursión (especialmente aquellos que son trivialmente equivalentes a bucles iterativos) para evitar el stack push / pop; Esto es posible cuando la llamada de función recursiva es lo último que sucede en el cuerpo de la función antes de regresar, y se conoce comúnmente como una optimización de llamada de cola (u optimización de recursión de cola ). Una función recursiva optimizada correctamente para la cola de llamadas es en su mayoría equivalente a un bucle iterativo en el nivel de código de máquina.
Otra consideración es que los bucles iterativos requieren actualizaciones de estado destructivas, lo que los hace incompatibles con la semántica del lenguaje puro (sin efectos secundarios). Esta es la razón por la cual los lenguajes puros como Haskell no tienen construcciones de bucle, y muchos otros lenguajes de programación funcional los carecen por completo o los evitan tanto como sea posible.
Sin embargo, la razón por la que estas preguntas aparecen tanto en las entrevistas es porque, para responderlas, necesita una comprensión profunda de muchos conceptos vitales de programación (variables, llamadas a funciones, alcance y, por supuesto, bucles y recursión), y tiene para llevar a la mesa la flexibilidad mental que le permite abordar un problema desde dos ángulos radicalmente diferentes y moverse entre diferentes manifestaciones del mismo concepto.
La experiencia y la investigación sugieren que existe una línea divisoria entre las personas que tienen la capacidad de comprender las variables, los punteros y la recursividad, y los que no. Casi todo lo demás en programación, incluidos los marcos, las API, los lenguajes de programación y sus casos límite, se pueden adquirir a través del estudio y la experiencia, pero si no puede desarrollar una intuición para estos tres conceptos básicos, no está en condiciones de ser un programador. La traducción de un bucle iterativo simple a una versión recursiva es la forma más rápida posible de filtrar a los que no son programadores; incluso un programador bastante inexperto generalmente puede hacerlo en 15 minutos, y es un problema muy agnóstico del lenguaje, por lo que el candidato puede elegir un idioma de su elección en lugar de tropezar con idiosincrasias.
Si recibe una pregunta como esta en una entrevista, es una buena señal: significa que el posible empleador está buscando personas que puedan programar, no personas que hayan memorizado el manual de una herramienta de programación.