JS Klasické Fibonacciho Výzvou - Rozdiely medzi dvoma riešenia

0

Otázka

Mám dve riešenia rovnakou výzvou, že tento klasický fibonacciho napadnúť, že každý vie, ako to vyriešiť (dokonca aj vaše miláčikov).

Som láskavo požiadať vás, aby ste navrhnúť iné riešenie. Ja len chcem porovnať tieto dve riešenia. Tisíce rôznych riešení možno nájsť pomocou vyhľadávania.

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

*/

Obe riešenia, sú uvedené nižšie v poriadku. Moja jediná otázka je:

Nemá riešenie, B bežať pomalšie ako riešenie? Pretože v B máme tento riadok nižšie:

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

Sa length funkcia prejsť celé pole vypočítať počet položiek? Alebo už vracia z okamžite?

Riešenie:

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

Riešenie 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

Najlepšiu odpoveď

1

Som súhlasiť s CertainPerformance, Riešenie je lepšie.

V mnohých situáciách pomocou .dĺžka by byť rovnako rýchlo, pretože prehliadač vám vopred vypočítať a ísť len tak efektívne, ako keby ste vytvoriť local variable sami však myslím, že v tvojom prípade, Riešenie je lepšie, pretože budete používať službu na poli počas slučky, takže dĺžka budú prepočítané.

Odpoveď na tento príspevok hovorí o tom, ale on nemá push ako vy.

2021-11-24 01:38:51
1

@MisterJojo môžete ukážte mi prosím kód, napríklad na zjednodušenie to?

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 iných jazykoch

Táto stránka je v iných jazykoch

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