当前位置:首页 > JavaScript

js实现n的阶乘

2026-01-31 03:30:49JavaScript

递归方法实现阶乘

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

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

特点:代码简洁,但需注意栈溢出风险(如 n 过大时)。

循环方法实现阶乘

通过循环迭代计算,避免递归的潜在性能问题。

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

特点:性能更优,适合大数计算。

尾递归优化(ES6)

利用ES6的尾调用优化减少栈开销,需严格满足尾递归条件。

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

注意:并非所有JavaScript引擎都支持尾调用优化。

使用BigInt处理大数阶乘

n 较大时(如 n > 20),普通数字类型会溢出,需使用 BigInt

function factorial(n) {
    let result = 1n; // BigInt类型
    for (let i = 2n; i <= n; i++) {
        result *= i;
    }
    return result;
}
// 调用时传入BigInt或普通数字(需转换)
console.log(factorial(20n)); // 输出: 2432902008176640000n

适用场景:需要计算极大阶乘时。

js实现n的阶乘

性能与边界条件

  • 输入验证:处理负数或非整数输入(如抛出错误)。
  • 缓存结果:频繁计算时可缓存已计算的结果提升性能。

根据需求选择合适的方法,常规场景推荐循环或尾递归,大数计算必须使用 BigInt

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

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…