N的阶乘问题


n factorial issue with large number

我编写了以下代码来查找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安装有两个问题。

  1. 在一台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);

    你可以尝试解决这个问题,将数字存储为字符串(数字)或数组(数字),然后编写一些函数来进行这些字符串(数组)的乘法运算,但这并不容易做到