U mnie są dwa rozwiązania tego samego zadania, tej klasycznej zadania Fibonacciego, którą wszyscy wiedzą, jak go rozwiązać (nawet swoje zwierzęta).
Uprzejmie proszę NIE proponować żadnych innych rozwiązań. Ja po prostu chcę porównać te dwa rozwiązania. Za pomocą wyszukiwarki można znaleźć tysiące różnych rozwiązań.
Zadanie:
/*
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...
*/
Oba poniższe rozwiązania działają normalnie. Mój jedyny problem w tym,:
Czy rozwiązanie B wolniej, niż rozwiązanie A? Bo w B mamy ten wiersz poniżej:
fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])
Czy to czyni length
funkcja przechodzi przez cały masyw, aby obliczyć liczbę elementów? Czy już wraca od razu?
Rozwiązanie 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))
Rozwiązanie:
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))