当前位置:首页 > JavaScript

js实现n的阶乘

2026-04-04 19:28:30JavaScript

递归实现

递归是计算阶乘最直观的方法,利用函数调用自身的方式实现。

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

说明

  • 基线条件为 n === 0n === 1,直接返回 1
  • 递归调用 n * factorialRecursive(n - 1) 逐步分解问题。

循环实现

通过循环(如 forwhile)迭代计算阶乘,避免递归可能导致的栈溢出问题。

js实现n的阶乘

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

说明

  • 初始化 result1,从 2 开始累乘到 n
  • 时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。

尾递归优化

某些 JavaScript 引擎支持尾调用优化(TCO),可优化递归性能。

js实现n的阶乘

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

说明

  • 通过 accumulator 参数保存中间结果,避免递归栈堆积。
  • 需确认运行环境是否支持 TCO(如 Safari)。

大数处理(BigInt)

n 较大时(如 n > 20),使用 BigInt 避免精度丢失。

function factorialBigInt(n) {
  let result = 1n; // BigInt 字面量
  for (let i = 2n; i <= BigInt(n); i++) {
    result *= i;
  }
  return result;
}

说明

  • BigInt 类型通过后缀 nBigInt() 构造函数定义。
  • 适用于计算超大数阶乘(如 n = 1000)。

性能对比

  • 递归:代码简洁,但可能栈溢出(如 n > 10000)。
  • 循环:性能稳定,适合大多数场景。
  • BigInt:解决大数问题,但需兼容性检查。

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

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

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取 jQ…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…