在R语言中,计算阶乘可以通过以下两种方法实现:
一、使用内置函数 `factorial()`
R语言提供了现成的 `factorial()` 函数,用于计算非负整数的阶乘。该函数采用迭代算法,能够处理较大的数值。
示例:
```r
计算5的阶乘
fact_5 <- factorial(5)
print(fact_5) 输出 120
计算10的阶乘
fact_10 <- factorial(10)
print(fact_10) 输出 3628800
```
注意事项:
输入值必须为非负整数,否则会返回错误(如 `factorial(-1)` 会报错)。
对于非常大的数,建议使用 `bigfactor()` 函数以节省内存。
二、手动实现阶乘计算
若需理解阶乘的原理或处理特殊场景,可以手动编写循环或递归函数。
1. 迭代实现
```r
计算n的阶乘
factorial_iter <- function(n) {
if (n < 0) {
stop("输入必须为非负整数")
}
result <- 1
for (i in 2:n) {
result <- result * i
}
return(result)
}
示例
fact_10 <- factorial_iter(10)
print(fact_10) 输出 3628800
```
2. 递归实现
```r
递归计算n的阶乘
factorial_rec <- function(n) {
if (n < 0) {
stop("输入必须为非负整数")
}
if (n == 0 || n == 1) {
return(1)
}
return(n * factorial_rec(n - 1))
}
示例
fact_10 <- factorial_rec(10)
print(fact_10) 输出 3628800
```
三、扩展应用:排列组合计算
阶乘在排列组合中应用广泛,例如计算组合数 `C(n, k)` 可以使用公式:
$$C(n, k) = \frac{n!}{k!(n-k)!}$$
示例:
```r
计算C(5, 2)
n <- 5
k <- 2
comb_kn <- factorial(n) / (factorial(k) * factorial(n - k))
print(comb_kn) 输出 10
```
总结
推荐使用 `factorial()` 函数,它简洁且经过优化,适用于大多数场景;
若需自定义逻辑,可选择迭代或递归实现;
处理极大数值时,优先使用 `bigfactor()` 以提高效率。