是否存在FreeCodeCamp的“奇数斐波那契数之和”任务的递归版本?

时间:2017-03-13 11:30:35

标签: javascript recursion

参考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;
}

我想稍微扩大一下这个问题:你认为有可能使用递归算法吗?我猜没有。你对此有何看法?这是一个“仅迭代”的案例吗?

1 个答案:

答案 0 :(得分:1)

您可以使用闭包来保持变量范围的安全,然后递归很简单。

我将变量移动到一个对象中,以便在函数完成后使用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