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

135
Vistas
Declaración de devolución no está haciendo lo que esperaba

Aquí está el código.

 print(5); function print(n) { if (n == 0) { return; } print(n - 1); //call function recursively console.log(n); }

Esperaría después de la declaración de devolución que console.log(n) arrojaría cero (0) porque ese era el valor de n cuando llamé a la declaración de devolución. En su lugar, devuelve 1 - 5 ??? El retorno solo se llamó una vez, entonces, ¿alguien puede explicar qué está pasando aquí?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Dentro de su código hay un retorno implícito, piense en la función más así:

 function print(n){ if(n==0){ return ; } print(n-1); //call function recursively console.log(n); return undefined; }

Entonces, cuando se llama a print(n-1) con 4 , se repetirá hacia abajo hasta que llegue a su valor de 0 . Sin embargo, después de eso, la función de llamada registrará el valor n .

Esencialmente, su retorno solo regresa a la persona que llama, no desenrolla completamente la pila de llamadas y evita que se llame a ese console.log . Se verá algo como esto:

 print(n-1); // called with 4 print(n-1); // called with 3 print(n-1); // called with 2 print(n-1); // called with 1 print(n-1); // called with 0 return; console.log(n) // 1 console.log(n) // 2 console.log(n) // 3 console.log(n) // 4 console.log(n) // 5
about 4 years ago · Juan Pablo Isaza Denunciar

0

La función de impresión todavía se llama cinco veces. El valor de n no se propaga a las llamadas anteriores.

La declaración de devolución no finaliza toda la cadena de llamadas recursivas. La ejecución continúa después de la declaración de retorno en la línea donde se llamó a la función de salida.

Si desea que algún código se ejecute solo una vez en una función recursiva, colóquelo antes del retorno en la rama if:

 function print(n) { if (n == 0) { console.log(n); return; } print(n - 1); //call function recursively }
about 4 years ago · Juan Pablo Isaza 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