求斐波那契数组中的奇数之和
题目
在这道题目中,我们需要写一个函数,参数为一个正整数num。它的作用是计算斐波那契数列中,小于或等于num的奇数之和。
斐波那契数列中,第一和第二个数字都是 1,后面的每个数字由之前两数相加得出。斐波那契数列的前六个数字分别为:1、1、2、3、5、8。
比如,sumFibs(10)应该返回10。因为斐波那契数列中,比10小的数字只有 1、1、3、5。
sumFibs(4000000)应该返回 4613732。
sumFibs(1000)应该返回 1785。
sumFibs(75025)应该返回 135721。
代码
var sumFibs = (function () {
let arr = [0, 1, 1]
return function (n) {
if (!arr[n]) {
let i = arr.length;
while (i <= n) {
arr[i] = arr[i - 1] + arr[i - 2]
i++
}
}
return sum(arr, n);
}
})();
function sum(arr, n) {
return arr.reduce(function (prev, cur, index, arr) {
return cur % 2 && cur <= n ? prev + cur : prev;
})
}
sumFibs(4);