javascript - 在 Javascript 中计算斐波那契数列的最有效方法

标签 javascript algorithm big-o fibonacci

我正在尝试通过优化算法和理解 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;
}

关于javascript - 在 Javascript 中计算斐波那契数列的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973567/

相关文章:

java - 这个 5 行 Java 算法的时间复杂度是多少?

algorithm - 分析具有递归 T(n) = T(n - 1) + T(n - 2) + T(n -3) 的算法?

c++ - 大数的乘法和比较

algorithm - 这些函数的相对渐近行为

javascript - 如何在 Jquery 中预览图像?

javascript - 如何保存和存储直播中的音频?

javascript - 错误 TS2339 : Property 'Default' does not exist on type 'string' . **

javascript - 如何打开没有菜单项的侧边栏?

algorithm - 相互检查列表中的每个值

algorithm - B树的最小和最大高度