当前位置:首页 > JavaScript

js实现n的阶乘

2026-03-01 18:39:08JavaScript

递归实现

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

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

循环实现

使用循环可以避免递归可能导致的栈溢出问题,适合计算较大的阶乘。通过迭代从 1 到 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 类型处理大整数阶乘。

js实现n的阶乘

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

性能比较

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

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

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…