回显并返回不同的值

时间:2019-01-15 08:00:49

标签: php int return echo bcmath

我正在对PHP bcmath进行扩展以进行阶乘计算,发现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的{​​{1}}结果并返回了错误的结果,但是如果i echo $sumecho test()的话,它会纠正结果return $sum。为什么

1 个答案:

答案 0 :(得分:1)

由于您正在使用recursion(请参阅带有return的行),请将后一个版本与echo test()test($a-1)一起使用。仅当使用 return语句将递归结果传递回堆栈中的下一个更高级别时,递归才能正常工作。

另一方面,

echo不会返回要进一步计算的中期结果-只是将其打印出来。