JS คลาสสิค Fibonacci ท้าทาย-ความแตกต่างระหว่างสองคนอทางแก้ปัญหานั่น

0

คำถาม

ฉันมีสองทางแก้ปัญหานั่นเดียวกันกับที่วามท้าทายนี้คลาสสิค fibonacci ท้าทายว่าทุกคนรู้วิธีแก้ปัญหามัน(แม้แต่ของสัตว์เลี้ยง).

ผมยินดีขอให้คุณไม่ต้องแนะนำอื่นอทางแก้ปัญหานั่น. ฉันแค่ต้องการจะเปรียบเทียบพวกนี้สองคนอทางแก้ปัญหานั่น. เป็นพันๆคนต่างออกทางแก้ปัญหานั่นให้พบกับการค้นหา.

ท้าทาย:

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

*/

ทั้งสองวิธีแก้ปัญหาต่างๆที่ด้านล่างกำลังทำงานสบายดี คำถามเดียวของฉันคือ:

มี ทางออก B วิ่งหนีจะทำให้เครื่องทำงานช้าลงกว่า ทางออกเป็น? เพราะว่าใน B เรามีบรรทัดด้านล่างนี้:

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

แม่ length ฟังก์ชันค้นทั่วทั้งอาเรย์ต้องคำนวณเลขของรายการหรือไม่? หรืออยู่แล้วจะกลับมาจากในทันที?

ทางออกเป็น:

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

ทางออก 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

คำตอบที่ดีที่สุด

1

ฉันเห็นด้วยกับ CertainPerformance,ทางออกเป็นมันดีกว่ากัน

ในหลากหลายสถานการณ์โดยใช้.ความยาวเป็นแค่เร็วที่สุดเพราะว่ากาเบราว์เซอร์จะ pre-สะทกสะทานเลยละสิมันแล้วไปเหมือน efficiently เหมือนว่าคุณทำตัวแปรภายในตัวเองอย่างไรก็ตามฉันคิดว่าในคดีของคุณหาทางออนดีกว่าเพราะว่าคุณใช้กดในตารางคู่ลำดับระหว่างวงแล้วความยาวจะ recalculated.

คำตอบ นี้ ลังพูดเกี่ยวกับมันแต่เขาไม่ต้องผลักเหมือนกับที่คุณทำ

2021-11-24 01:38:51
1

@MisterJojo คุณสามารถได้โปรดให้ฉันดูเป็นรหัสตัวอย่างที่ต้อง simplify มัน?

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

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่