JS Clásico de Fibonacci Reto - Diferencias entre dos soluciones

0

Pregunta

Tengo dos soluciones para el mismo problema, este clásico de fibonacci reto que todo el mundo sabe cómo resolverlo (incluso a sus mascotas).

Le ruego a usted que NO sugieren ninguna de las otras soluciones. Sólo quiero comparar estas dos soluciones. Miles diferentes se pueden encontrar soluciones con las búsquedas.

Reto:

/*
     0  1  2  3  4  5  6  7   8   9 
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

     fib(3) returns 2
     fib(9) returns 34
     and so on...

*/

Ambas soluciones a continuación están trabajando bien. Mi única pregunta es:

¿ La solución B se ejecutan más lentamente que la solución? Debido a que en B, tenemos esta línea de abajo:

fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])

¿El length la función de ir a través de toda la matriz para calcular el número de elementos? O ya regresa de inmediato?

Solución:

function fib(n) {
  const fiboArray = [0,1]
  for(let i=2; i <= n; i++) {
    fiboArray.push(fiboArray[i-2] + fiboArray[i-1])
  }
  return fiboArray[n]
}
console.log(fib(5))

Solución B:

function fib(n) {
  const fibArr = [0, 1, 1]
  
  if(n == 0) {
    return 0
  }

  if(n == 1 || n == 2) {
    return 1
  }


  if (n > 2) {
    for (let i = 3; i <= n; i++) {
      fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])
    }
  }
  
  return fibArr[fibArr.length - 1]
}


console.log(fib(9))
arrays javascript loops
2021-11-24 01:22:07
2

Mejor respuesta

1

Estoy de acuerdo con CertainPerformance, la Solución es la mejor.

En muchas situaciones de uso .la longitud es igual de rápido debido a que el navegador se pre-calcular e ir tan eficientemente como si hacer una variable local de ti pero no creo que en tu caso la Solución es la mejor, ya que el uso de inserción en la matriz durante el bucle de modo que la longitud será recalculado.

La respuesta a este post habla de él pero él no tiene empuje al igual que usted.

2021-11-24 01:38:51
1

@MisterJojo puede usted por favor me muestran un ejemplo de código para simplificar?

function my_Fibonacci(n)
  {
  let a = 0
    , b = 1
    , r = [0, 1]
    ;
  for(let i=2; i<=n; i++)
    {
    r.push(a+b) // new fibonacci value
    a = b       // set a for next addition
    b = r[i]    // set b for next addition
    }
  // return r.join(' - ')
  return b
  }

document.write(my_Fibonacci(9))

2021-11-24 01:47:47

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................