题目:

给一个正整数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>