JS Clasic Fibonacci Provocare - Diferențele între două soluții

0

Problema

Am două soluții la aceeași provocare, acest joc clasic fibonacci provocare pe care toată lumea știe cum să o rezolve (chiar animale de companie).

Am rugamintea sa NU sugereze alte soluții. Vreau doar pentru a compara aceste două soluții. Mii de diferite soluții pot fi găsite cu căutările.

Provocare:

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

*/

Ambele soluții de mai jos sunt de lucru bine. Singura mea întrebare este:

Are soluția B rula mai lent decât O soluție? Pentru că în B avem această linie de mai jos:

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

Nu length funcția du-te prin întreaga matrice pentru a calcula numărul de elemente? Sau deja a se întoarce la imediat?

O Soluție:

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

Soluția 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

Cel mai bun răspuns

1

Sunt de acord cu CertainPerformance, O Soluție este mai bună.

În multe situații, folosind .lungimea ar fi doar la fel de repede pentru că browser-ul va pre-calcula și du-te la fel de eficient ca si cum ai face o variabilă locală-te cu toate acestea, cred că în cazul tău O Soluție este mai bună pentru că te folosești împinge pe matrice în buclă de lungime va fi recalculat.

Răspunsul la acest post vorbește despre asta, dar el nu are push ca tine.

2021-11-24 01:38:51
1

@MisterJojo poți, te rog, arată-mi un exemplu de cod pentru a simplifica?

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

În alte limbi

Această pagină este în alte limbi

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