给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
首先是找出所有小于num的斐波那契数列,然后计算数列中的奇数之和。算法实现如下:
function sumFibs(num) { var fib = [1,1]; var arr = []; var sum=0; var i=2; if(num<0) return false; while(fib[fib.length-1]<=num){ fib[i] = fib[i-2]+fib[i-1]; i++; } fib.pop(); //循环结束后fib数组多出一项,所以要pop一下 arr = fib.filter(function(val){return val%2===1;}); sum = arr.reduce(function(acc,cur){return acc+cur;},0); return sum; }