我正在对PHP bcmath
进行扩展以进行阶乘计算,发现echo
和return
会导致不同的结果
此代码产生错误的结果
<?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 $sum
和echo test()
的话,它会纠正结果return $sum
。为什么
答案 0 :(得分:1)
由于您正在使用recursion(请参阅带有return
的行),请将后一个版本与echo test()
和test($a-1)
一起使用。仅当使用 return语句将递归结果传递回堆栈中的下一个更高级别时,递归才能正常工作。
echo不会返回要进一步计算的中期结果-只是将其打印出来。