📅  最后修改于: 2023-12-03 15:08:39.567000             🧑  作者: Mango
斐波那契数列是指从 0 和 1 开始,后面的每一项都等于前面两项之和。其前几项为:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
最常见、最简单的方法是使用循环来计算斐波那契数列。我们可以从前往后计算每一项并将其存储起来,然后用它们来计算后面的项。
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]
另一种常见、但不太高效的方法是使用递归来计算斐波那契数列。它的工作原理是将问题分解成较小的子问题,并最终将子问题的解合并成原始问题的解。
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
}
这个算法的问题是它是指数时间复杂度,这意味着它会非常慢地计算其中较大的数字。因此,它只适用于较小的数。
动态规划是一种高效的递归算法。它的主要思想是在记住每个子问题的解的同时,解决每个子问题,最终得到最终问题的解。
对于斐波那契数列,我们可以使用动态规划来改进递归算法。我们需要 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 中计算斐波那契数列的方法有循环求解、递归求解和动态规划求解三种。循环和动态规划是最高效的方法,而递归是最简单的方法但不太高效。在实际编程中,我们应该选择最适合我们需要的算法。