JS Klasické Fibonacciho Výzva - Rozdíly mezi dvě řešení

0

Otázka

Mám dvě řešení stejné výzvě, tento klasický fibonacciho výzvou, že každý ví, jak to vyřešit (i vaše domácí mazlíčky).

Poprosím vás, abyste navrhnout nějaké další řešení. Jen jsem chtěla porovnat tyto dvě řešení. Tisíce různých řešení lze nalézt pomocí vyhledávání.

Výzva:

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

*/

Obě řešení jsou v pořádku. Moje jediná otázka je:

řešení B pomalejší než řešení? Protože v B máme tento řádek níže:

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

Dělá length funkce projít celé pole pro výpočet počtu položek? Nebo už se vrací z ihned?

Řešení:

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

Roztok 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

Nejlepší odpověď

1

Souhlasím s CertainPerformance, Řešení je lepší.

V mnoha situacích použití .délka by být jen tak rychle, protože prohlížeč bude pre-spočítat a jít jen tak efektivně, jako když uděláte lokální proměnné si však myslím, že ve vašem případě Řešení je lepší, protože můžete použít tlačit na pole během smyčky, takže délka bude přepočítána.

Odpověď na tento příspěvek hovoří o tom ale nemá tlačit, jako byste dělat.

2021-11-24 01:38:51
1

@MisterJojo můžete mi prosím ukázat příklad kódu, zjednodušit?

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

V jiných jazycích

Tato stránka je v jiných jazycích

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