📜  如何在 JavaScript 中计算斐波那契数列?(1)

📅  最后修改于: 2023-12-03 15:08:39.567000             🧑  作者: Mango

如何在 JavaScript 中计算斐波那契数列?

斐波那契数列是指从 0 和 1 开始,后面的每一项都等于前面两项之和。其前几项为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

计算斐波那契数列的方法
1. 循环求解

最常见、最简单的方法是使用循环来计算斐波那契数列。我们可以从前往后计算每一项并将其存储起来,然后用它们来计算后面的项。

function fibonacci(num) {
    var a = 0, b = 1, arr = [];

    for (var i = 0; i < num; i++) {
        arr.push(a);
        var temp = a;
        a = b;
        b = temp + b;
    }

    return arr;
}

// 使用
console.log(fibonacci(10)); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
2. 递归求解

另一种常见、但不太高效的方法是使用递归来计算斐波那契数列。它的工作原理是将问题分解成较小的子问题,并最终将子问题的解合并成原始问题的解。

function fibonacci(num) {
    if (num <= 1) {
        return num;
    }

    return fibonacci(num - 1) + fibonacci(num - 2);
}

// 使用
for (var i = 0; i < 10; i++) {
    console.log(fibonacci(i)); // 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
}

这个算法的问题是它是指数时间复杂度,这意味着它会非常慢地计算其中较大的数字。因此,它只适用于较小的数。

3. 动态规划求解

动态规划是一种高效的递归算法。它的主要思想是在记住每个子问题的解的同时,解决每个子问题,最终得到最终问题的解。

对于斐波那契数列,我们可以使用动态规划来改进递归算法。我们需要 memorize 前面的每一项,并在需要计算它时使用它们。

function fibonacci(num) {
    var arr = [0, 1];

    for (var i = 2; i <= num; i++) {
        arr.push(arr[i - 1] + arr[i - 2]);
    }

    return arr[num];
}

// 使用
console.log(fibonacci(10)); // 55
总结

在 JavaScript 中计算斐波那契数列的方法有循环求解、递归求解和动态规划求解三种。循环和动态规划是最高效的方法,而递归是最简单的方法但不太高效。在实际编程中,我们应该选择最适合我们需要的算法。