Sum All Odd Fibonacci Numbers
给一个正整数num
,返回小于或等于num
的斐波纳契奇数之和。
斐波纳契数列中的前几个数字是 1、1、2、3、5 和 8,随后的每一个数字都是前两个数字之和。
例如,sumFibs(4)应该返回 5,因为斐波纳契数列中所有小于4的奇数是 1、1、3。
提示:此题不能用递归来实现斐波纳契数列。因为当num
较大时,内存会溢出,推荐用数组来实现。
思路:
(1)首先用数组实现斐波那契数列;
(2)筛选出数组中数值为奇数的元素;
(3)for循环叠加小于num的元素。
知识点:
斐波那契数列的实现:
不断增加数组长度,不断赋值
代码:
1 function sumFibs(num) { 2 3 var cache = [1, 1]; 4 var idx=0; 5 function fb(n) { 6 if (n >= cache.length) { 7 for (var i = cache.length; i < n; i++) { 8 cache[i] = cache[i - 2] + cache[i - 1]; 9 } 10 } 11 return cache[n - 1]; 12 } 13 fb(1000); 14 cache = cache.filter(function (value) { 15 return value % 2 !== 0; 16 }); 17 for (var j = 0; j < cache.length; j++) { 18 if (num >= cache[j]) { 19 idx+=cache[j]; 20 } 21 } 22 23 return idx; 24 } 25 26 sumFibs(75025);