JS Classique de Fibonacci Défi - Différences entre les deux solutions

0

La question

J'ai deux solutions à ce même défi, ce classique de fibonacci défi que tout le monde sait comment le résoudre (même vos animaux de compagnie).

Je vous prie de bien de ne PAS suggérer d'autres solutions. Je veux juste comparer ces deux solutions. Des milliers de différentes solutions peuvent être trouvées avec la recherche.

Défi:

/*
     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...

*/

Les deux solutions ci-dessous fonctionnent très bien. Ma seule question est:

Ne solution B de fonctionner plus lentement que d' Une solution? Parce que dans B , nous avons cette ligne ci-dessous:

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

L' length la fonction de parcourir l'ensemble du tableau pour calculer le nombre d'éléments? Ou renvoie déjà à partir immédiatement?

La Solution:

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

Solution 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

La meilleure réponse

1

Je suis d'accord avec CertainPerformance, Une Solution est meilleure.

Dans de nombreuses situations à l'aide .la longueur serait tout aussi rapide car le navigateur de pré-calculer et aller de manière aussi efficace que si vous faites une variable locale vous-même cependant, je pense que dans votre cas, la Solution A est mieux parce que vous utilisez des push sur la pile de disques au cours de la boucle de longueur doit être recalculé.

La réponse à ce post en parle mais il n'a pas de pousser comme vous le faites.

2021-11-24 01:38:51
1

@MisterJojo pouvez vous s'il vous plaît me montrer un exemple de code pour simplifier?

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

Dans d'autres langues

Cette page est dans d'autres langues

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