题目:
给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
提示:此题不能用递归来实现斐波纳契数列。因为当num
较大时,内存会溢出,推荐用数组来实现。数组实现斐波那契数列资料。
思路:
先用数组的方法获取斐波那契数列,然后获取其中符合要求的奇数,之后求和。
代码:
<script type="text/javascript">
function sumFibs(num) {
//使用数组方法得到斐波那契数列
var arr = [1, 1];
if (num >= arr.length) {
for (var i = arr.length; i < num; i++) {
arr[i] = arr[i - 2] + arr[i - 1];
}
}
console.log(arr);
//获取小于num的奇数
var newarr = arr.filter(function(val) {
return val % 2 !== 0 && val <= num;
});
console.log(newarr);
//获取符合要求的奇数的和
return newarr.reduce(function(cur, next) {
return cur + next;
});
}
sumFibs(4);
</script>