当前位置:首页 > JavaScript

实现阶乘JS

2026-03-15 05:09:11JavaScript

递归实现

递归方法通过函数调用自身来实现阶乘计算,代码简洁但需要注意栈溢出风险(大数计算时)。

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

循环实现

迭代方法使用循环结构,性能优于递归且无栈溢出问题,适合处理较大数字。

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

尾递归优化

ES6支持的尾调用优化版本,兼具递归的可读性和迭代的性能优势。

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

大数处理

当需要计算超大数阶乘时,建议使用BigInt类型以避免数值精度丢失。

实现阶乘JS

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

性能对比

  • 递归:时间复杂度O(n),空间复杂度O(n)(调用栈)
  • 迭代:时间复杂度O(n),空间复杂度O(1)
  • 尾递归:在支持TCO的引擎中空间复杂度可优化为O(1)
  • BigInt版本适用于n>21的情况(普通number类型上限)

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

相关文章

php递归实现阶乘

php递归实现阶乘

递归实现阶乘的原理 阶乘的定义是对于一个非负整数 n,其阶乘是所有小于及等于 n 的正整数的积。递归是一种通过函数调用自身来解决问题的方法。递归实现阶乘的核心思想是将问题分解为更小的子问题,直到达到基…

JS如何访问react内部的数据

JS如何访问react内部的数据

访问 React 组件内部数据的方法 在 React 中,组件内部的数据通常通过 state 或 props 管理。以下是几种常见的访问方式: 通过 state 访问数据 React 组件的内部状态…

JS如何实现左右滑动

JS如何实现左右滑动

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

用JS实现冰墩墩

用JS实现冰墩墩

以下是用JavaScript绘制冰墩墩的几种实现方法,结合Canvas绘图和SVG路径数据: 使用Canvas绘制基础轮廓 const canvas = document.createEleme…

JS实现ln

JS实现ln

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

实现阶乘JS

实现阶乘JS

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