斐波纳契奇数求和算法挑战
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义: F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*) 在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
方法一:
function sumFibs(num) {
var arr=get(num); //获取数列
var res=arr.filter(function(a){ //筛选出奇数
return a%2!==0;
}).reduce(function(a,b){ //返回奇数之和
return a+b;
});
return res;
}
function get(num){ //返回一个斐波纳契数列,最后一位小于等于num
var arr=[1];
var sum=1;
var before=0;
var after=1;
while( sum<=num ){
arr.push(sum);
before=after;
after=sum;
sum=before+after;
}
return arr;
}
sumFibs(4);
方法二:
function sumFibs(num) {
var pre = 0,
now = 1,
next = 1,
r = 0;
while (pre <= num) {
if (pre % 2 === 1) {
r += pre;
}
if (now <= num && now % 2 === 1) {
r += now;
}
pre = next;
now = now + next;
next = next + now;
}
return r;
}
sumFibs(4);