Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

163
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!