📅  最后修改于: 2023-12-03 15:32:24.079000             🧑  作者: Mango
斐波那契数列是指从0和1开始,后续的数列中,每一项都等于前面两项之和。用数学式表示就是:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n >= 2)。
在 Javascript 中,我们可以使用递归和循环两种方式来实现斐波那契数列。
递归方式实现斐波那契数列非常简单,只需要将公式翻译成代码即可:
function fibonacci(n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
函数接收一个整数参数 n,如果 n 小于等于 1,直接返回 n,否则返回 fibonacci(n - 1) + fibonacci(n - 2) 的结果,这里使用递归调用来实现。
但是,递归方式实现斐波那契数列有一个非常严重的问题,就是效率非常低,因为递归调用会重复计算很多相同的值。比如,当 n 等于 50 的时候,递归方法要计算 n-1 和 n-2 的值多次,效率极低。
循环方式实现斐波那契数列可以解决递归方法效率低的问题,因为它不会重复计算相同的值。代码如下:
function fibonacci(n) {
if (n <= 1) {
return n;
}
let fib = [0, 1];
for (let i = 2; i <= n; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n];
}
先判断 n 是否小于等于 1,如果是,直接返回 n。否则,初始化数组 fib 为 [0, 1],然后从 i=2 开始循环到 n,每次计算 fib[i] 的值,并将其加入到数组中,最后返回 fib[n] 的值。
循环方式效率更高,因为每个值只计算一次,不会重复计算。但是,同时也需要占用更多的内存,因为需要创建一个数组来存储每个数列的值。
以上就是 Javascript 中实现斐波那契数列的两种方式。在实际使用中,可以根据具体情况来选择递归方式还是循环方式。如果需要计算很大的数列,建议使用循环方式来提高效率。