当前位置:首页 > 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如何调用react组件

JS如何调用react组件

调用React组件的常见方法 在JavaScript中调用React组件通常涉及以下几种场景和方式: 直接渲染组件 通过ReactDOM.render()方法将组件渲染到DOM节点: import…

php怎么实现阶乘

php怎么实现阶乘

实现阶乘的方法 在PHP中,可以通过多种方式实现阶乘计算。阶乘是指从1乘到指定的正整数n,通常表示为n!。以下是几种常见的实现方法: 使用递归函数 递归是一种函数调用自身的技术,适用于阶乘计算。…

JS节流和防抖的实现

JS节流和防抖的实现

节流(Throttle)的实现 节流是指在一定时间间隔内,函数最多执行一次。常用于限制高频事件的触发频率,如滚动事件、窗口调整等。 function throttle(func, delay) {…

JS实现一个并发函数

JS实现一个并发函数

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

JS实现ln

JS实现ln

在JavaScript中实现自然对数(ln)功能可以通过以下几种方式完成: 使用Math对象的原生方法 JavaScript内置的Math对象提供了Math.log()方法,该方法默认计算以自然对数…

实现阶乘JS

实现阶乘JS

递归实现阶乘 递归是一种直接按照数学定义实现阶乘的方法。n的阶乘可以表示为n乘以(n-1)的阶乘,基础情况是0的阶乘为1。 function factorialRecursive(n) { if…