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

298
Views
¿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 answers
Answer question

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 Report

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 Report

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 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!