您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JavaScript如何求10阶乘
## 什么是阶乘?
在数学中,**阶乘**(Factorial)是所有小于及等于该数的正整数的积,记作 `n!`。例如:
5! = 5 × 4 × 3 × 2 × 1 = 120
特别地,`0!` 定义为 1。
## JavaScript实现阶乘的5种方法
### 方法1:for循环(基础版)
```javascript
function factorial(n) {
let result = 1;
for (let i = 1; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorial(10)); // 输出: 3628800
特点: - 最直观的实现方式 - 时间复杂度:O(n) - 空间复杂度:O(1)
function factorial(n) {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
console.log(factorial(10)); // 3628800
注意事项: - 存在最大调用栈限制(Chrome约10000层) - 对于大数计算可能导致栈溢出
function factorial(n, acc = 1) {
if (n === 0) return acc;
return factorial(n - 1, n * acc);
}
console.log(factorial(10)); // 3628800
优势: - 符合尾调用优化条件 - 在支持ES6严格模式的引擎中可避免栈溢出
当计算更大的阶乘(如100!)时:
function bigFactorial(n) {
let result = 1n; // BigInt字面量
for (let i = 1n; i <= BigInt(n); i++) {
result *= i;
}
return result;
}
console.log(bigFactorial(10).toString()); // "3628800"
为什么需要BigInt: - JavaScript的Number类型最大安全整数是2^53-1 - 20! = 2432902008176640000 已超过安全整数范围
const factorial = n =>
Array.from({length: n}, (_, i) => i + 1)
.reduce((acc, val) => acc * val, 1);
console.log(factorial(10)); // 3628800
特点: - 无副作用 - 利用数组的reduce方法 - 代码简洁但效率略低
方法 | 10!耗时 | 10000!可行性 | 代码复杂度 |
---|---|---|---|
for循环 | 最快 | 不可行 | 低 |
递归 | 中等 | 不可行 | 中 |
尾递归 | 中等 | 部分支持 | 中 |
BigInt | 较慢 | 可行 | 中 |
函数式 | 最慢 | 不可行 | 高 |
const memo = [1, 1]; // 缓存0!和1!
function memoFactorial(n) {
if (memo[n] !== undefined) return memo[n];
return memo[n] = n * memoFactorial(n - 1);
}
使用Gamma函数(Γ(n) = (n-1)!):
// 近似计算
function gamma(x) {
// 实现Gamma函数的近似计算
// ...
}
JavaScript实现阶乘有多种方式,选择取决于具体场景。对于10!这样的常规计算,基础的for循环是最佳选择。随着现代JavaScript的发展,BigInt的出现使得大数阶乘计算成为可能,而函数式编程则提供了更声明式的实现方式。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。