当前位置:首页 > JavaScript

1.1.2.3.5.8.13.21 js实现

2026-02-01 22:38:45JavaScript

使用JavaScript生成斐波那契数列

斐波那契数列是一个经典的数学序列,其中每个数字是前两个数字的和。以下是用JavaScript实现斐波那契数列的几种方法。

1.1.2.3.5.8.13.21 js实现

使用循环生成斐波那契数列

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]

动态规划优化递归

递归方法在计算较大的斐波那契数列时可能会有性能问题,可以使用动态规划优化:

1.1.2.3.5.8.13.21 js实现

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]

以上方法都可以生成斐波那契数列,选择哪种方法取决于具体的应用场景和性能需求。循环和动态规划方法适合生成固定长度的序列,而生成器和闭包适合按需生成序列。

标签: js
分享给朋友:

相关文章

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现刷新

js实现刷新

刷新当前页面 使用 location.reload() 方法可以强制刷新当前页面。该方法接受一个布尔参数,默认为 false,表示从缓存中加载页面;设为 true 时强制从服务器重新加载。 // 从…

js实现点击隐藏

js实现点击隐藏

使用CSS类切换实现点击隐藏 通过添加或移除CSS类来控制元素的显示与隐藏。定义一个隐藏样式类如.hidden { display: none; },通过事件监听切换该类。 document.que…

js实现vue弹窗

js实现vue弹窗

实现 Vue 弹窗的基本方法 使用 Vue.js 实现弹窗功能可以通过组件化方式完成。以下是一个简单的弹窗实现示例,包含显示/隐藏控制、内容插槽和基础样式。 弹窗组件代码 创建 Modal.vue…