ฉันมีสองทางแก้ปัญหานั่นเดียวกันกับที่วามท้าทายนี้คลาสสิค 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))