JS Classic Fibonacci Challenge - İki çözüm arasındaki farklar

0

Soru

Aynı meydan okumaya iki çözümüm var, herkesin nasıl çözeceğini bildiği bu klasik fibonacci meydan okuması (evcil hayvanlarınız bile).

Sizden başka bir çözüm önermemenizi rica ediyorum. Sadece bu iki çözümü karşılaştırmak istiyorum. Aramalarla binlerce farklı çözüm bulunabilir.

Zorluk:

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

*/

Aşağıdaki her iki çözüm de iyi çalışıyor. Tek sorum:

Çözüm B, çözüm A'dan daha yavaş çalışır mı? Çünkü B'de aşağıda bu satır var:

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

Yapar length işlev, öğe sayısını hesaplamak için tüm diziden geçiyor mu? Ya zaten hemen verir?

Çözüm A:

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

Çözüm 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

En iyi cevabı

1

Kesin performansla aynı fikirdeyim, Çözüm A daha iyi.

Birçok durumda kullanılır .uzunluk aynı derecede hızlı olacaktır çünkü tarayıcı bunu önceden hesaplayacak ve yerel bir değişkeni kendiniz yapıyormuşsunuz gibi verimli bir şekilde ilerleyecektir, ancak sizin durumunuzda Çözümün daha iyi olduğunu düşünüyorum çünkü döngü sırasında dizide push kullanıyorsunuz, böylece uzunluk yeniden hesaplanacaktır.

Bu yazının cevabı bunun hakkında konuşuyor ama senin gibi zorlaması yok.

2021-11-24 01:38:51
1

@MisterJojo bunu basitleştirmek için bana bir kod örneği gösterebilir misiniz?

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

Diğer dillerde

Bu sayfa diğer dillerde

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