参考How can I get the sum of all odd fibonacci vales in javaScript?,从FCC派生的可能解决方案如下所示:
function sumFibs(num) {
let prevNumber = 0;
let curNumber = 1;
let result = 0;
while (curNumber <= num) {
if (curNumber % 2 !== 0) {
result += curNumber;
}
curNumber += prevNumber;
prevNumber = curNumber - prevNumber;
}
return result;
}
我想扩大一下这个问题:您是否有可能为此使用递归算法?我猜没有。您对此有何看法?这是“仅迭代”案例吗?
最佳答案
您可以使用闭包来保持变量范围的安全,然后递归很简单。
我将变量移到一个对象中,以便函数完成后可以使用Object.assign
轻松重置它们。
const sumFibs = (() => {
const o = { p: 0, c: 1, r: 0 };
const d = Object.assign({}, o);
const sumFibs = n => {
if (o.c >= n) {
const t = o.r;
Object.assign(o, d);
return t;
}
if (o.c % 2 !== 0)
o.r += o.c;
o.c = o.c + o.p;
o.p = o.c - o.p;
return sumFibs(n);
}
return sumFibs;
})();
console.log(sumFibs(100)); // 188