当前位置:首页 > JavaScript

实现阶乘JS

2026-04-06 22:42:03JavaScript

阶乘的概念

阶乘(Factorial)指从1到给定正整数n的所有整数的乘积,记作n!。例如5! = 5 × 4 × 3 × 2 × 1 = 120。0!定义为1。

递归实现

递归方法通过函数调用自身逐步分解问题,直到达到基线条件(如n ≤ 1)。

实现阶乘JS

function factorialRecursive(n) {
  if (n <= 1) return 1;
  return n * factorialRecursive(n - 1);
}
// 示例:factorialRecursive(5) 返回 120

循环实现

通过循环结构(如forwhile)逐次累乘,避免递归的调用栈开销。

实现阶乘JS

function factorialIterative(n) {
  let result = 1;
  for (let i = 2; i <= n; i++) {
    result *= i;
  }
  return result;
}
// 示例:factorialIterative(5) 返回 120

尾递归优化

某些JavaScript引擎支持尾调用优化(TCO),可减少递归的栈溢出风险。

function factorialTailRecursive(n, accumulator = 1) {
  if (n <= 1) return accumulator;
  return factorialTailRecursive(n - 1, n * accumulator);
}
// 示例:factorialTailRecursive(5) 返回 120

大数处理(BigInt)

当n较大时(如n > 20),普通数值类型会溢出,需使用BigInt

function factorialBigInt(n) {
  let result = 1n; // BigInt字面量
  for (let i = 2n; i <= n; i++) {
    result *= i;
  }
  return result;
}
// 示例:factorialBigInt(20n) 返回 2432902008176640000n

性能与注意事项

  • 递归简洁但可能栈溢出(如n > 10000未优化时)。
  • 循环适用于大多数场景,性能稳定。
  • BigInt适用于大数计算,但需注意浏览器兼容性(IE不支持)。

根据需求选择合适方法,常规场景推荐循环实现。

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

相关文章

JS实现跳表

JS实现跳表

跳表的基本概念 跳表(Skip List)是一种基于概率的数据结构,允许快速查询、插入和删除操作,时间复杂度平均为O(log n)。它通过多层链表实现,每一层都是下一层的子集,高层链表跳过多个元素,从…

JS如何实现左右滑动

JS如何实现左右滑动

实现左右滑动的方法 使用 touchstart、touchmove 和 touchend 事件监听触摸操作,计算滑动距离和方向。 let startX, moveX; element.addEve…

JS实现日期滚动选择

JS实现日期滚动选择

实现日期滚动选择的基本思路 使用HTML、CSS和JavaScript创建一个日期滚动选择器,允许用户通过滚动选择年、月、日。核心是通过监听滚动事件,动态更新显示的值。 HTML结构 创建一个包含年…

JS实现一个并发函数

JS实现一个并发函数

实现并发控制的几种方法 在JavaScript中实现并发控制可以通过多种方式,以下是几种常见的方法: Promise.all 使用Promise.all可以并行执行多个异步任务,等待所有任务完成后再…

JS奇数实现

JS奇数实现

判断数字是否为奇数 在JavaScript中,可以通过取模运算符(%)来判断一个数字是否为奇数。奇数除以2的余数为1。 function isOdd(num) { return num %…

JS实现小手状

JS实现小手状

使用CSS cursor属性实现小手状 在网页中实现鼠标悬停时显示小手形状,最简单的方法是使用CSS的cursor属性。该属性可以直接设置为pointer,浏览器会自动渲染为手型图标。 .click…