Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

273
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda