輸入n,求fibonacci數列的第n項
function fibonacci(n)
if (n == 0)
if (n == 1)
return fibonacci(n-1) + fibonacci(n-2);
}
這其實並不是很好的方法
比如求fibonacci(10)的時候,分解成了fibonacci(9)和fibonacci(8),但是fibonacci(9)又會分解成fibonacci(8)和fibonacci(7),其中就重複計算了fibonacci(8),以此類推,重複的計算非常多,最簡單的辦法就是記錄下已經計算過的值:
function fibonacci2(n)
if (arr[n] != undefined)
let data = calc(n-1) + calc(n-2);
arr[n] = data;
return data;
} return calc(n);
}function fibonaccifunc()
let data = calc(n-1) + calc(n-2);
arr[n] = data;
return data;
} return calc;
}
let fibonacci3 = fibonaccifunc();
上面兩種方法用到了閉包
fibonacci3的壞處是只要fibonacci3不被釋放, 記憶體中arr陣列會一直存在。尤其當計算過比較大的數字後;但是當需要大量的計算fibonacci數時,fibonacci3會比較有優勢,但是要記住最後釋放fibonacci3,即:
fibonacci3 = null;
還有一種方法就是不用遞迴,直接迴圈
function fibonacci4 (n)
return data;
}
// 以上方法《劍指offer>中更加詳細的說明 js實現斐波那契數列
遞迴 斐波那契數列是這樣的乙個數列,1,1,2,3,5,8,即前兩項都是1,後面每一項都是其前面兩項的和。臨界值 小於2 都是1 公式 fbnq 3 fbnq 2 fbnq 1 fbnq 4 fbnq 3 fbnq 2 function fbnq mouth return fbnq mouth 1 ...
js實現斐波那契數列
輸入n,求fibonacci數列的第n項 function fibonacci n if n 0 if n 1 return fibonacci n 1 fibonacci n 2 這其實並不是很好的方法 比如求fibonacci 10 的時候,分解成了fibonacci 9 和fibonacci ...
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...