3

我正在bcmath为阶乘计算进行 php 扩展,我发现 echoreturn 导致不同的结果

此代码生成错误的结果

<?php
    $a = 25;
    function test($a){
        if($a>1){
        $sum   =   bcmul($a, test($a-1)) ;
            echo $sum;
        } 
       if($a == 1) { return $a ;}
    }
    test($a);   // Output  200000000000000000000000
    ?>  

而下面的代码生成正确的结果

<?php 
$a = 25;
function test($a){
    if($a>1){
    $sum   =   bcmul($a, test($a-1)) ;
        return $sum;
    } 
   if($a == 1) { return $a ;}
}
echo test($a);

?>

这个问题会产生200000000000000000000000结果 echo $sum并返回错误的结果,但如果 iecho test()然后return $sum它倾向于正确的结果15511210043330985984000000。为什么

4

1 回答 1

1

return请使用带有and的后一个版本,echo test()因为您使用的是递归(参见带有 的行test($a-1))。递归仅在使用将中间结果传递回堆栈中的下一个更高级别的return 语句时才能正常工作。

另一方面, echo 不会返回要进一步计算的中间结果 - 它只是将它们打印出来。

于 2019-01-15T08:36:27.980 回答