当前位置:首页 > JavaScript

js实现n的阶乘

2026-03-01 18:39:08JavaScript

递归实现

递归是最直观的阶乘实现方式,通过函数调用自身来解决问题。当 n 为 1 或 0 时,直接返回 1,否则返回 n * factorial(n - 1)

js实现n的阶乘

function factorial(n) {
  if (n === 0 || n === 1) {
    return 1;
  }
  return n * factorial(n - 1);
}

循环实现

使用循环可以避免递归可能导致的栈溢出问题,适合计算较大的阶乘。通过迭代从 1 到 n,逐步累乘结果。

js实现n的阶乘

function factorial(n) {
  let result = 1;
  for (let i = 2; i <= n; i++) {
    result *= i;
  }
  return result;
}

尾递归优化

尾递归是递归的一种优化形式,某些 JavaScript 引擎(如 Safari)会对其进行优化,避免栈溢出。需要将中间结果作为参数传递。

function factorial(n, acc = 1) {
  if (n === 0 || n === 1) {
    return acc;
  }
  return factorial(n - 1, n * acc);
}

大数阶乘(BigInt)

对于较大的 n(如 n > 20),普通数字类型会溢出,可以使用 BigInt 类型处理大整数阶乘。

function factorial(n) {
  let result = 1n; // BigInt literal
  for (let i = 2n; i <= n; i++) {
    result *= i;
  }
  return result;
}

性能比较

  • 递归:代码简洁,但可能栈溢出(如 n > 10000)。
  • 循环:性能较好,适合大多数场景。
  • 尾递归:部分引擎优化,但兼容性有限。
  • BigInt:适合大数计算,但需注意类型转换。

标签: 阶乘js
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEv…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在H…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现求导

js实现求导

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