La recursión no es intrínsecamente mejor o peor que los bucles: cada uno tiene ventajas y desventajas, e incluso dependen del lenguaje de programación (y de 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, volver, y saltando de la pila. OTOH, muchos casos de recursión (especialmente aquellos que son trivialmente equivalentes a los bucles iterativos) se pueden escribir para que se pueda evitar el push / pop de la pila; esto es posible cuando la llamada a la función recursiva es lo último que sucede en el cuerpo de la función antes de regresar, y se conoce comúnmente como optimización de la llamada de la cola (o optimización de la recursión de la cola ) . Una función recursiva optimizada para una llamada de cola adecuada es casi siempre equivalente a un bucle iterativo a 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 que los lenguajes puros como Haskell no tienen construcciones de bucles en absoluto, 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, se necesita una comprensión profunda de muchos conceptos de programación vitales: variables, llamadas a funciones, alcance y, por supuesto, ciclos y recursiones. y tiene que llevar la flexibilidad mental a la tabla 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 entre las personas que tienen la capacidad de comprender las variables, los indicadores y la recursión y las que no. Casi todo lo demás en programación, incluidos los marcos de trabajo, las API, los lenguajes de programación y sus casos extremos, puede adquirirse a través del estudio y la experiencia, pero si no puede desarrollar una intuición para estos tres conceptos básicos, no es apto para ser programador. Traducir un simple bucle iterativo a una versión recursiva es la forma más rápida de filtrar a los no programadores: incluso un programador bastante inexperto puede hacerlo en 15 minutos, y es un problema muy independiente del lenguaje, por lo que el candidato puede elegir un idioma de su elección en lugar de tropezar con idiosyncracies.
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.