題目要求
給一個正整數num,返回小於或等於num的斐波納契奇數之和。
斐波納契數列中的前幾個數字是 1、1、2、3、5 和 8,隨後的每一個數字都是前兩個數字之和。
例如,sumFibs(4)應該返回 5,因爲斐波納契數列中所有小於4的奇數是 1、1、3。
提示:此題不能用遞歸來實現斐波納契數列。因爲當num較大時,內存會溢出,推薦用數組來實現。
解析
數組溢出
題目不推薦用數組完成本題,也粗略測試了下,用數組緩存的話會發生一點小問題,在n爲75025和75024的兩種情況下,得到的結果是一樣的,但是應該是不一樣的。。可能是緩存會出現問題,之後在網上找到了這種循環存儲的方法比較實用
解題思路
第一步:建立fibo原始數組,用於存儲後期的數據
第二步:通過中間變量temp將fibo[0]和fibo[1]循環存入fibonacci數,並完成奇偶數判斷,存入nums中
第三步:將大象放進去
第四步:關上門
Javascript代碼
function sumFibs(num) {
var fibo = [1, 1];
var nums = 2;
var temp = 0;
while(true){
temp = fibo[0] + fibo[1];
if(temp > num){
return nums;
}
if(temp % 2 !== 0){
nums += temp;
}
fibo[0] = fibo[1];
fibo[1] = temp;
}
}
sumFibs(2);
結語
又是fibonacci數列,有點意思,這種循環存儲有規律數據的方法有學到了,賺到。