当前位置:首页 > JavaScript

js 实现阶乘

2026-02-01 14:39:33JavaScript

递归实现

递归是计算阶乘最直观的方法之一。递归函数会不断调用自身,直到达到基本情况(通常是 n === 0n === 1)。

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

循环实现

使用循环可以避免递归可能导致的堆栈溢出问题,尤其是在计算大数阶乘时。

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

尾递归优化

尾递归是一种优化递归的方式,可以避免堆栈溢出。但需要注意的是,JavaScript 引擎不一定支持尾调用优化(TCO)。

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

使用 BigInt 处理大数

JavaScript 的 Number 类型有精度限制,对于大数阶乘(如 n > 20),可以使用 BigInt 避免精度丢失。

js 实现阶乘

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

性能比较

  • 递归实现简洁但可能导致堆栈溢出。
  • 循环实现性能较好,适合大多数场景。
  • 尾递归优化在支持 TCO 的环境中表现优异。
  • BigInt 适合处理大数阶乘,但会牺牲部分性能。

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

相关文章

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js实现二叉树

js实现二叉树

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

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现密码

js实现密码

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

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…