当前位置:首页 > JavaScript

js实现阶乘

2026-02-01 16:15:47JavaScript

递归实现阶乘

递归是一种常见的阶乘实现方式,通过函数调用自身逐步分解问题。

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

说明

  • 基线条件为 n === 0n === 1,此时直接返回 1
  • 递归调用 n * factorialRecursive(n - 1) 逐步计算乘积。

循环实现阶乘

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

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

说明

  • 初始化 result1,从 2 开始遍历到 n
  • 每次迭代将当前值 iresult 相乘。

尾递归优化实现

尾递归优化可避免递归的栈溢出问题,但需确保 JavaScript 引擎支持(如严格模式)。

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

说明

  • 使用 accumulator 参数保存中间结果,减少调用栈开销。
  • 需在严格模式下运行('use strict')以启用优化。

使用 reduce 实现

利用数组的 reduce 方法简洁实现阶乘。

function factorialReduce(n) {
  return Array.from({ length: n }, (_, i) => i + 1)
    .reduce((acc, val) => acc * val, 1);
}

说明

js实现阶乘

  • Array.from 生成 [1, 2, ..., n] 的数组。
  • reduce 方法累乘所有数组元素,初始值为 1

性能与注意事项

  • 递归:代码简洁,但大数值可能导致栈溢出(如 n > 10000)。
  • 循环:性能稳定,适合大数值计算。
  • 尾递归:需引擎支持,否则与普通递归无异。
  • 边界处理:建议添加对负数或非整数的校验(如抛出错误)。
function factorialSafe(n) {
  if (n < 0 || !Number.isInteger(n)) {
    throw new Error('Input must be a non-negative integer');
  }
  return factorialIterative(n); // 选择上述任一实现
}

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

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

jquery.js

jquery.js

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

js实现二叉树

js实现二叉树

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…