要求
给一个正整数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);

本文介绍了一个计算小于或等于给定数值的所有斐波纳契奇数之和的算法实现。通过迭代生成斐波纳契数列,并判断每个数是否为奇数来累加和值,最终返回总和。
412

被折叠的 条评论
为什么被折叠?



