1.1.2.3.5.8.13.21 js实现
使用JavaScript生成斐波那契数列
斐波那契数列是一个经典的数学序列,其中每个数字是前两个数字的和。以下是用JavaScript实现斐波那契数列的几种方法。
使用循环生成斐波那契数列
function fibonacci(n) {
let sequence = [1, 1];
for (let i = 2; i < n; i++) {
sequence.push(sequence[i - 1] + sequence[i - 2]);
}
return sequence;
}
console.log(fibonacci(8)); // 输出: [1, 1, 2, 3, 5, 8, 13, 21]
使用递归生成斐波那契数列
function fibonacciRecursive(n, sequence = [1, 1]) {
if (sequence.length >= n) {
return sequence;
}
const nextValue = sequence[sequence.length - 1] + sequence[sequence.length - 2];
return fibonacciRecursive(n, [...sequence, nextValue]);
}
console.log(fibonacciRecursive(8)); // 输出: [1, 1, 2, 3, 5, 8, 13, 21]
动态规划优化递归
递归方法在计算较大的斐波那契数列时可能会有性能问题,可以使用动态规划优化:
function fibonacciDP(n) {
if (n === 1) return [1];
if (n === 2) return [1, 1];
const dp = [1, 1];
for (let i = 2; i < n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp;
}
console.log(fibonacciDP(8)); // 输出: [1, 1, 2, 3, 5, 8, 13, 21]
生成器函数实现
如果需要按需生成斐波那契数列,可以使用生成器函数:
function* fibonacciGenerator() {
let a = 1, b = 1;
yield a;
yield b;
while (true) {
const next = a + b;
yield next;
a = b;
b = next;
}
}
const fib = fibonacciGenerator();
const sequence = Array.from({ length: 8 }, () => fib.next().value);
console.log(sequence); // 输出: [1, 1, 2, 3, 5, 8, 13, 21]
使用闭包实现
闭包可以保存状态,适合生成连续的斐波那契数列:
function createFibonacciClosure() {
let a = 1, b = 1;
return function() {
const next = a;
a = b;
b = next + b;
return next;
};
}
const getNextFibonacci = createFibonacciClosure();
const sequence = Array.from({ length: 8 }, () => getNextFibonacci());
console.log(sequence); // 输出: [1, 1, 2, 3, 5, 8, 13, 21]
以上方法都可以生成斐波那契数列,选择哪种方法取决于具体的应用场景和性能需求。循环和动态规划方法适合生成固定长度的序列,而生成器和闭包适合按需生成序列。







