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

303
Vistas
¿El generador de secuencias de Fibonacci no funciona para 1 o 2 como entradas pero funciona para el resto de la secuencia?

¿Alguien puede explicarme por qué mi función fibonacciGenerator no funciona con este código? Entiendo por qué funciona con el segundo código, pero no entiendo por qué no funciona el primero.

 function fibonacciGenerator(n) { if (n > 0) { var fArray = []; fArray.push(0); if (n >= 2) { fArray.push(1); } for (var i = 0; i < n; i++) { fArray.push(fArray[i] + fArray[i + 1]); } console.log(fArray); } } fibonacciGenerator(1); fibonacciGenerator(2);

Segundo código funcionando:

 function fibonacciGenerator(n) { if (n > 0) { var fArray = []; fArray.push(0); if (n >= 2) { fArray.push(1); } for (var i = 2; i < n; i++) { fArray.push(fArray[i - 1] + fArray[i - 2]); } console.log(fArray); } } fibonacciGenerator(1); fibonacciGenerator(2);

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

0

El primer código está imprimiendo 2 números de Fibonacci adicionales, esto se debe a que:

primero está presionando 0 y 1 en la matriz como:

 var fArray = []; fArray.push(0); if (n >=2 ){ fArray.push(1); }

y luego vuelves a repetir hasta n veces. Por esta razón, imprime dos números de Fibonacci adicionales.

la solución es repetir el tiempo n-2 o usar el segundo código.

about 4 years ago · Juan Pablo Isaza Denunciar

0

var fArray = []; fArray.push(0); if (n >= 2) { fArray.push(1); }

La condición inicial es cubrir n=1: [0] y n=2: [0,1]

El segundo código funciona porque el ciclo solo comienza cuando n es mayor que i , lo que significa que se salta el ciclo con n < 2 .

Para su problema, no se salta el ciclo cuando n < 2 .

 for (var i = 0; i < n; i++) { fArray.push(fArray[i] + fArray[i + 1]); }

Puede imaginar que el resultado será como el siguiente cuando n < 2 con su bucle. Tenga en cuenta que el valor inicial es fArray = [0]

 fArray.push(fArray[0] + fArray[1]); //fArray[1] is undefined because you only have 1 item in your array

En este caso fArray[0] + fArray[1] ==> 0 + undefined = NaN

Entonces es por eso que tu lógica no funciona cuando n < 2

Para corregirlo, debe evitar el bucle si n < 2

 //if n=1 or n=2, it won't trigger the loop due to `i < n-2` for (var i = 0; i < n-2; i++) { fArray.push(fArray[i] + fArray[i + 1]); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

La idea de comenzar con 0 i lugar de 2, y ajustar el cuerpo del bucle en consecuencia, está bien, pero hay una cosa que la primera versión no ajustó: la condición de parada del bucle.

Al establecer i=0 , la primera versión se repite 2 veces más que la segunda versión. También debe modificar la condición final de la misma manera: en lugar de i < n , debe tener i < n - 2 , para asegurarse de que el número de iteraciones sea el mismo que en la segunda versión.

No está relacionado con su pregunta, pero es mejor colocar console.log fuera de la función. El trabajo de la función debe ser devolver la matriz, no imprimirla. Así también, cuando n > 0 es falso, debería devolver una matriz vacía.

 function fibonacciGenerator(n) { var fArray = []; if (n > 0) { fArray.push(0); if (n >= 2) { fArray.push(1); } for (var i = 0; i < n - 2; i++) { fArray.push(fArray[i] + fArray[i + 1]); } } return fArray; } console.log(fibonacciGenerator(1)); console.log(fibonacciGenerator(2));

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