Hace un mes, he sido entrevistado por algunos miembros de PTO de Google. Una de las preguntas era: Invertir una cadena de forma recursiva en js y explicar el tiempo de ejecución por la notación O grandeInvertir una cadena: Recursión vs iteración en javascript
este fue mi solución:
function invert(s){
return (s.length > 1) ? s.charAt(s.length-1)+invert(s.substring(0,s.length-1)) : s;
}
Bastante simple, creo.
Y, sobre la notación big-o, respondí rápidamente O (n) ya que el tiempo de ejecución depende linealmente de la entrada. - Silencio - y luego, me preguntó, ¿cuáles son las diferencias en términos de tiempo de ejecución si lo implementas por iteración?
Respondí que a veces el compilador "traduce" la recursión en iteración (algunas memorias del curso del lenguaje de programación) por lo que no hay diferencias sobre la iteración y la recursión en este caso. Por cierto, dado que no tenía comentarios sobre esta pregunta en particular, y el entrevistador no respondió "ok" o "nope", me gustaría saber si usted está de acuerdo conmigo o si puede explicarme si podría haber diferencias sobre el 2 tipo de implementaciones.
Muchas gracias y Saludos cordiales.
No estoy seguro, pero podría haber una sobrecarga de generación de pila de llamadas en el recursividad, que no habría una en un bucle. –
Por cierto, habría almacenado la longitud en lugar de acceder a ella 3 veces, pero tal vez no había necesidad de optimización ... (lo siento, siempre optimizo prematuramente, es una de mis muchas fallas) –
@Martin: generación de pila de llamadas debería ser una * muy * pequeña sobrecarga. En cualquier caso, el código aquí recursá n veces, tiene la misma complejidad computacional que un ciclo que itera n veces. – Juliet