要求
给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
样本
sumFibs(1)
应该返回一个数字。
sumFibs(1000)
应该返回 1785。
sumFibs(4000000)
应该返回 4613732。
sumFibs(4)
应该返回 5。
sumFibs(75024)
应该返回 60696。
sumFibs(75025)
应该返回 135721。
参考
解法
function sumFibs(num) {
var curNum = 1,//当前数列数的值
sum = 2,//奇数和
arr = [1,1];//缓存
if(num===1)return 1;//如过是1,直接返回
while(true){
curNum = arr[0]+arr[1];
if(curNum>num) return sum;
if(curNum%2===1) sum+=curNum;
arr[0]=arr[1];
arr[1]=curNum;
}
return sum;
}
sumFibs(2);