我正试图通过优化算法和理解big-o等来变得更好。
我把下面的函数组合起来计算第n个斐波那契数这是可行的(对于相当高的投入)。我的问题是,如何改进这个功能用这种方法计算斐波那契数列有什么缺点?

function fibo(n) {

    var i;
    var resultsArray = [];

    for (i = 0; i <= n; i++) {
        if (i === 0) {
            resultsArray.push(0);
        } else if (i === 1) {
            resultsArray.push(1);
        } else {
            resultsArray.push(resultsArray[i - 2] + resultsArray[i - 1]);
        }
    }

    return resultsArray[n];
}

我相信时间的大o是o(n),但是空间的大o是o(n^2),因为我创建了数组。这是对的吗?

最佳答案

如果没有数组,则可以节省内存和.push调用

function fib(n) {
    var a = 0, b = 1, c;
    if (n < 3) {
        if (n < 0) return fib(-n);
        if (n === 0) return 0;
        return 1;
    }
    while (--n)
        c = a + b, a = b, b = c;
    return c;
}

09-12 21:31