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

275
Views
En recursión, ¿por qué es esta la salida?

acabo de empezar a aprender javascript y me encontré con este código mientras aprendía recursividad, ¿podría alguien explicarme por qué el resultado es [1,2,3,4,5]?

 function rangeOfNumbers(startNum, endNum) { if (endNum - startNum === 0) { return [startNum]; } else { var numbers = rangeOfNumbers(startNum, endNum - 1); numbers.push(endNum); return numbers; } } console.log(rangeOfNumbers(1,5))

Parece que no puedo entender esta línea de código "var números = rangeOfNumbers (startNum, endNum - 1);"

Todo lo que sé es que se vuelve a llamar a sí mismo mientras resta 1 en endNum cada llamada y lo empuja a la matriz de numbers

about 4 years ago · Santiago Gelvez
3 answers
Answer question

0

Escribí algunos comentarios a las líneas para que puedas captar el propósito funcional de cada uno, si necesitas una comprensión más profunda de lo que sucede, intenta usar la herramienta de depuración de tu IDE (vscode, por ejemplo).

Allí verá que ingresará a la declaración else, llamará a la función de forma recursiva, saltará nuevamente a else y recursividad hasta que llegue al final definido en el primer if , luego habrá terminado de llamar a la recursividad y el estado recursivo everz llamará al siguiente línea donde presiona el número y luego regresa al siguiente estado de recurrencia superior.

Así que el recorrido con 1,3:

3 > 1, => recurse a 2>1, => recurse a 1=1, rompa la recursividad, empuje 1, salga, empuje 2, salga, empuje 3, entonces ya está

 function rangeOfNumbers(startNum, endNum) { if (endNum - startNum === 0) { // This statement checks if the recursion has hit its end when endNum === startNum return [startNum]; // This is the point when the recursion is stopped } else { var numbers = rangeOfNumbers(startNum, endNum - 1); // If the recursion is not finished yet, the function will call itself with the reduced endNum numbers.push(endNum); // This is first called in the deepest recursion, so the first one to be added is 1, then it steps back to the recursion state one above and in this case adds the 2 to the array return numbers; // Finally we return to be done with the function } } console.log(rangeOfNumbers(1,5)) // This is the start, the function is called with the 2 parameters 1 and 5
about 4 years ago · Santiago Gelvez Report

0

Agregar registros lo ayudará a visualizar lo que sucede en el código. Te mostrará cómo se hacen las llamadas y con qué parámetros. Nota: el registro de Stackoverflow no tiene sangría, por lo que es mejor mirar la consola del navegador para verlo.

 function rangeOfNumbers(startNum, endNum) { console.group("rangeOfNumbers called with ", startNum, endNum); console.log("Subtraction = ", endNum - startNum); if (endNum - startNum === 0) { // did we hit the end point? console.log("We got zero. Returning ", startNum); console.groupEnd(); return [startNum]; } else { // numbers are different console.log("Calling rangeOfNumbers inside of else"); var numbers = rangeOfNumbers(startNum, endNum - 1); // Make a new call with end number reduced by one console.log("rangeOfNumbers call returned", numbers.join(", ")); numbers.push(endNum); console.log("pushing ", endNum); console.log("numbers updated with", numbers.join(", ")); console.groupEnd(); return numbers; } } console.log(rangeOfNumbers(1,5))

about 4 years ago · Santiago Gelvez Report

0

Supongamos (por ahora) que rangeOfNumbers(a,b) produce la lista de números de a a b (inclusive).

Ahora, la parte sobre la que preguntó específicamente tiene sentido: para obtener la lista de números desde startNum hasta endNum (inclusive):

  • Calcule la lista de números desde startNum hasta endNum pero sin incluirlo.
  • Agregue endNum al final de esa lista

Eso deja nuestra suposición molesta: nuestra función solo funciona si funciona para un rango más corto . Y aquí es donde entra en juego el if : si la lista solo contiene un único valor, devolver una lista de solo ese valor, sin hacer una llamada recursiva (lo que obviamente debería ser correcto).

Lo que significa:

  • La función funciona para listas de longitud 1 (el código if )
  • Funciona para listas de longitud 2 (haciendo una llamada recursiva para una lista de longitud 1, que acabamos de establecer que funciona).
  • Funciona para listas de longitud 3 (haciendo una llamada recursiva para una lista de longitud 2, que acabamos de establecer que funciona).
  • ...
  • Funciona para listas de longitud N (haciendo una llamada recursiva para una lista de longitud N-1, que acabamos de establecer que funciona).

Lo que significa que funciona para cualquier valor de N que pueda representar la longitud de una lista.

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!