Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

165
Vistas
no puede entender la lógica de la recursividad

Esta función tiene que devolver una cadena invertida. Por ejemplo, “perro” -> “dios”. Funciona correctamente pero no entiendo la lógica y necesito una explicación.

 function reverse (str) { if (str.length <= 1) return str; return reverse(str.slice(1)) + str[0] }
about 4 years ago · Santiago Gelvez
3 Respuestas
Responde la pregunta

0

El caso base de la función recursiva es la declaración if, donde cuando solo hay un carácter en la cadena, obtienes la cadena misma.

En la instrucción de retorno, la función de división proporciona la cadena sin el primer carácter. El + str[0] ayuda a invertir la cadena adjuntando la primera letra de la cadena al final de la cadena, mientras que la función inversa se llama recursivamente en la cadena sin el primer carácter.

Veamos el mundo TENET como ejemplo.

En la primera ejecución, no se llamará a la instrucción if. La declaración de devolución devolverá inversa (ENET) + T. Esto hará que se vuelva a llamar inversa con ENET como entrada.

En la segunda ejecución, la declaración if se omite nuevamente y la declaración return dará reverse(NET) + E.

Con suerte, puedes ver a dónde va esto. En cada llamada recursiva, el primer carácter se agrega al final de la cadena de entrada. Para cuando terminemos todas las llamadas, ¡la palabra se invertirá!

about 4 years ago · Santiago Gelvez Denunciar

0

Explicación

En primer lugar, llama a reverse(“dog”) y devuelve reverse(“og”)+”d” Luego, reverse(“og”) continúa ejecutándose nuevamente. Devuelve reverse(“g”)+”o” El último, reverse(“g”) solo devuelve “g” ya que la sentencia if es verdadera

Luego, conecta el reverso ("g") al reverso ("g") + "o", como resultado, se devuelve "go" Finalmente, conecta el reverso ("og") al reverso ("og") + "d ”, que es “ir”+”d”, como resultado “dios” es la salida

El flujo

  • (1) inverso("perro") llamado -> retorno inverso("og")+"d"
  • (2) inverso("og") llamado -> retorno inverso("g")+"o"
  • (3) revertir ("g") llamado -> devolver "g" (si declaración)
  • (4) conectar (3) a (2) -> volver "g" + "o" -> "ir"
  • (5) conectar (4) a (1) -> volver "ir" + "d" -> "dios"
about 4 years ago · Santiago Gelvez Denunciar

0

No es necesario que alguien escriba el comportamiento de recurrencia para un ejemplo, ya que es posible que no se aplique a todos los tipos y órdenes de recurrencia.

Lo mejor es ejecutar y depurar el fragmento proporcionado y observar el seguimiento de la pila local y los valores del ámbito, ya que necesita comprender lo que hace en cada llamada.

 function reverse (str) { if (str.length <= 1) return str; debugger; const remainingString = str.slice(1); const leadingChar = str[0]; return reverse(remainingString) + leadingChar; }

En este ejemplo es obligatorio entender solo que esto ejecutará primero el reverse(remainingString) hasta llegar a if (str.length <= 1) return str; , luego extraiga funciones de la pila de llamadas y agregue el valor devuelto con + leadingChar hasta que todas las funciones se extraigan de la pila de llamadas.

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda