斐波那契数列(Fibonacci sequence)
,又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
斐波那契数列指的是这样一个数列:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711……
它的规律是:这个数列从第 3 项开始,每一项都等于前两项之和。
斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
递归方法相对简洁,但效率较低,因为对于较大的 n 值,它会产生大量的重复计算。
function fibonacciRecursive(n) {
if (n <= 1) {
return n;
} else {
return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
}
// 示例:生成前10个斐波那契数
for (let i = 0; i < 10; i++) {
console.log(fibonacciRecursive(i));
}
循环方法效率更高,因为它避免了重复计算。
function fibonacciIterative(n) {
if (n <= 1) {
return n;
}
let a = 0;
let b = 1;
let temp;
for (let i = 2; i <= n; i++) {
temp = a + b;
a = b;
b = temp;
}
return b;
}
// 示例:生成前10个斐波那契数
for (let i = 0; i < 10; i++) {
console.log(fibonacciIterative(i));
}
在循环方法中,我们维护两个变量 a 和 b,分别代表斐波那契数列中的前两个数。在每次迭代中,我们计算下一个斐波那契数(a + b),并更新 a 和 b 的值。当循环结束时,b 将包含第 n 个斐波那契数。
通常,在处理斐波那契数列时,循环方法比递归方法更受欢迎,因为它具有更好的性能。特别是当 n 较大时,递归方法可能会导致栈溢出或性能问题。