用php实现阶乘
使用递归方法实现阶乘
递归是一种常见的实现阶乘的方法,代码简洁但需要注意递归深度限制。

function factorial($n) {
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
// 示例:计算5的阶乘
echo factorial(5); // 输出120
使用循环方法实现阶乘
循环方法更高效且不受递归深度限制,适合计算大数阶乘。

function factorial($n) {
$result = 1;
for ($i = 2; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}
// 示例:计算10的阶乘
echo factorial(10); // 输出3628800
处理大数阶乘
当需要计算非常大的阶乘时,可以使用GMP扩展处理大整数。
function bigFactorial($n) {
$result = gmp_init(1);
for ($i = 2; $i <= $n; $i++) {
$result = gmp_mul($result, $i);
}
return gmp_strval($result);
}
// 示例:计算100的阶乘
echo bigFactorial(100); // 输出一个非常大的数字
注意事项
- 递归方法有深度限制,默认约为100-1000次,取决于PHP配置
- 普通整数类型有最大值限制(PHP_INT_MAX)
- 对于n=0或1,阶乘结果均为1
- 负数没有阶乘定义,应添加参数验证
参数验证增强版
function safeFactorial($n) {
if (!is_int($n) || $n < 0) {
throw new InvalidArgumentException("阶乘参数必须是非负整数");
}
$result = 1;
for ($i = 2; $i <= $n; $i++) {
$result *= $i;
}
return $result;
}






