当前位置:首页 > JavaScript

js 实现阶乘

2026-02-01 14:39:33JavaScript

递归实现

递归是计算阶乘最直观的方法之一。递归函数会不断调用自身,直到达到基本情况(通常是 n === 0n === 1)。

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

循环实现

使用循环可以避免递归可能导致的堆栈溢出问题,尤其是在计算大数阶乘时。

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

尾递归优化

尾递归是一种优化递归的方式,可以避免堆栈溢出。但需要注意的是,JavaScript 引擎不一定支持尾调用优化(TCO)。

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

使用 BigInt 处理大数

JavaScript 的 Number 类型有精度限制,对于大数阶乘(如 n > 20),可以使用 BigInt 避免精度丢失。

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

性能比较

  • 递归实现简洁但可能导致堆栈溢出。
  • 循环实现性能较好,适合大多数场景。
  • 尾递归优化在支持 TCO 的环境中表现优异。
  • BigInt 适合处理大数阶乘,但会牺牲部分性能。

js 实现阶乘

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

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…