我写了以下用于查找n!的代码。我通过CLI运行它。
<?php
$handle = fopen("php://stdin", "r");
$number = (int) trim(fgets($handle));
$fact = calcFactorial($number);
echo $fact . "\n";
function calcFactorial($number) {
if ($number < 2) {
return 1;
} else {
return $number * calcFactorial($number - 1);
}
}
fclose($handle);
?>
上面的代码工作正常。但是有两个不同的PHP安装有两个问题。
答案 0 :(得分:1)
嵌套限制:
如果calcFactorial()可以非递归,则可以将其更改为:
function calcFactorial($number){
if($number<2){
return 1;
}
$ret = 1;
for($i=2;$i<=$number;$i++){
$ret = $ret*$i;
}
return $ret;
}
如果必须递归,你永远不能计算出比最大函数嵌套级别更大的阶乘数。
INF:
这意味着PHP认为数字是不定式的(大到存储在内存中)...我认为(不确定)答案大于PHP_INT_MAX ......
您可以通过echo is_infinite($ number);
确认您可以尝试将数字存储为字符串(数字)或数组(数字),然后编写一些函数来使这些字符串(数组)相乘,但这样做并不容易