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

212
Vistas
El método recursivo no finaliza la ejecución al regresar

Buenos días. Tengo un problema con un método recursivo, este método imprimirá números en la ventana. la función dado un número n, imprime siguiendo un patrón por ejemplo:

n= 16, diferencia = 5

 16 11 6 1 -4 1 6 11 16

n= 10, diferencia = 5

 10 5 0 5 10

El código:

 function pattern(number, dif, m = 0, nI = 0) { if (m === 2) { return 0; } var nI = nI !== 0 ? nI : number; if (!(m === 2)) { document.write(number + ' ') } if (number === 0 || number < 0) { pattern(number + dif, dif, 1, nI) } if (m === 0) { pattern(number - dif, dif, 0, nI) } if (m === 1) { if (nI == number) { pattern(false, false, 2, false) } pattern(number + dif, dif, 1, nI) } } pattern(10, 5)

Básicamente, cuando el número está en 'n', vuelve a llamar a la función con el parámetro m = 2, se ejecuta el retorno pero ingresa en la suma:

 if (m===1) { if (nI == number) { pattern(false, false, 2,false) } >>> pattern(number+dif, dif, 1,nI) <<<< }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su código se puede simplificar un poco. Cada vez que llama a una función foo() , el cuerpo de la función se ejecuta, y una vez que la función regresa/completa, el código continúa su ejecución desde la línea después de la llamada a la función foo() . Con esto en mente, su función recursiva puede simplificarse llamando a pattern() recursivamente mientras su number es positivo, y luego regresando (completando la función recursiva) para pasar la ejecución del código al código después de la llamada pattern() original:

 function pattern(number,dif) { if(number <= 0) { document.write(number); } else { // If number > 0 document.write(number + ' '); pattern(number-dif, dif); document.write(' ' + number); } } pattern(16, 5);

La idea es la siguiente: cuando encuentra un número positivo distinto de cero, lo imprime y luego vuelve a llamar al patrón, que luego imprime el número que se le dio, que luego vuelve a llamar al patrón, etc. hasta que finalmente llega a un número negativo/cero. . Cuando eso suceda, ya no tendrá más llamadas recursivas para realizar (vea el bloque if anterior), por lo que volvemos a la persona que llamó originalmente a nuestra función de patrón, que era la llamada recursiva anterior. Después de haber pasado el control de nuevo a la función de llamada, podemos imprimir de nuevo el número actual:

 pattern() --> 16 | pattern() --> 11 | | pattern() --> 6 | | | pattern() --> 1 | | | | pattern() --> -4 (returns to above function, printing 1 again) | | | pattern() --> 1 | | pattern() --> 6 | pattern() --> 11 pattern() --> 16

Crear una función de utilidad para acumular los valores en una matriz y luego unirlos y registrarlos (en lugar de que la función realice el registro) es más limpio en mi opinión:

 function pattern(number, dif) { return number <= 0 ? [number] : [number, ...pattern(number-dif, dif), number]; } const patternArr = pattern(16, 5); document.body.textContent = patternArr.join(' ');

about 4 years ago · Juan Pablo Isaza Denunciar

0

Todas sus llamadas recursivas de pattern deben usarse con return . De lo contrario, seguirá yendo más profundo.

 function pattern(number,dif,m=0, nI=0) { if (m===2) { return 0; } var nI = nI !== 0 ? nI : number; if (!(m===2)) { document.write(number+' ') } if (number=== 0 || number < 0){ return pattern(number+dif, dif, 1,nI) } if (m===0) { return pattern(number-dif, dif, 0,nI) } if (m===1) { if (nI == number) { return pattern(false, false, 2,false) } return pattern(number+dif, dif, 1,nI) } } pattern(10,5)

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