我编写了以下代码来查找n!
<?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安装有两个问题。
- 在一台PC上,我得到
致命错误:最大函数嵌套级别达到'100',流产!
为了纠正上述问题,我在这里找到了解决方案。这是解决问题的正确方法吗?因为它依赖于特定的默认值xdebug。max_nesting_level"。
- 在另一台PC上,我得到
那么解决这个问题的最佳方法是什么呢?正
注::我已经通过了这个网站的各种解决方案,但我无法得出结论。
UPDATE:建议使用一个函数。但是不使用任何函数就能做到吗?
嵌套限制:
如果calcFactorial()可以是非递归的,那么你可以将其更改为:
function calcFactorial($number){
if($number<2){
return 1;
}
$ret = 1;
for($i=2;$i<=$number;$i++){
$ret = $ret*$i;
}
return $ret;
}
如果必须是递归的,你永远无法计算大于最大函数嵌套级别的数的阶乘。
正:
这意味着PHP认为数字是不定式(大到存储在内存中)…我认为(不确定)答案大于PHP_INT_MAX…
你可以通过echo is_infinite($number);
你可以尝试解决这个问题,将数字存储为字符串(数字)或数组(数字),然后编写一些函数来进行这些字符串(数组)的乘法运算,但这并不容易做到