Mám dvě řešení stejné výzvě, tento klasický fibonacciho výzvou, že každý ví, jak to vyřešit (i vaše domácí mazlíčky).
Poprosím vás, abyste navrhnout nějaké další řešení. Jen jsem chtěla porovnat tyto dvě řešení. Tisíce různých řešení lze nalézt pomocí vyhledávání.
Výzva:
/*
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...
*/
Obě řešení jsou v pořádku. Moje jediná otázka je:
Má řešení B pomalejší než řešení? Protože v B máme tento řádek níže:
fibArr.push(fibArr[fibArr.length - 1] + fibArr[fibArr.length - 2])
Dělá length
funkce projít celé pole pro výpočet počtu položek? Nebo už se vrací z ihned?
Řešení:
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))
Roztok 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))