斐波那契函数(Fibonacci Function)是一个经典的数学函数
定义如下:
- ( F(0) = 0 )
- ( F(1) = 1 )
- ( F(n) = F(n-1) + F(n-2) ) 对于 ( n \geq 2 )
斐波那契数列的前几项是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
下面是一些用JavaScript实现斐波那契函数的方法:
1. 递归实现
递归实现是最直观的方法,但效率较低,因为会重复计算很多子问题。
function fibonacci(n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(10)); // 输出 55
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];
}
console.log(fibonacci(10)); // 输出 55
3. 迭代实现
迭代实现也是一种高效的解决方案,只需要常数级别的额外空间。
function fibonacci(n) {
if (n <= 1) {
return n;
}
let a = 0, b = 1, c;
for (let i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
console.log(fibonacci(10)); // 输出 55
4. 尾递归实现
尾递归是一种优化的递归方法,可以在某些编译器中优化为迭代,避免栈溢出。
function fibonacci(n, a = 0, b = 1) {
if (n === 0) {
return a;
}
if (n === 1) {
return b;
}
return fibonacci(n - 1, b, a + b);
}
console.log(fibonacci(10)); // 输出 55
5. 使用矩阵快速幂
对于大数情况,可以使用矩阵快速幂来高效计算斐波那契数列。
function matrixMultiply(a, b) {
const result = [
[a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]],
[a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]]
];
return result;
}
function matrixPower(matrix, n) {
if (n === 1) {
return matrix;
}
let result = [[1, 0], [0, 1]];
while (n > 0) {
if (n % 2 === 1) {
result = matrixMultiply(result, matrix);
}
matrix = matrixMultiply(matrix, matrix);
n = Math.floor(n / 2);
}
return result;
}
function fibonacci(n) {
if (n <= 1) {
return n;
}
const matrix = [[1, 1], [1, 0]];
const result = matrixPower(matrix, n - 1);
return result[0][0];
}
console.log(fibonacci(10)); // 输出 55
以上是几种常见的斐波那契函数实现方法。每种方法都有其适用的场景和优缺点。希望这些示例对你有所帮助。如果有任何疑问或需要进一步的解释,请随时提问。
PS:学会了记得,点赞,评论,收藏,分享