<?PHP
function gugu($hg)
{
if($hg==0){
return 1;
}else{
return $hg * gugu($hg-1);
}
}
echo gugu(3);
?>
这是一个能正常运行的递归函数,如果我把$hg-1 换成$hg--或者--$hg,为什么实现不了这个效果呢?我感觉都是一样的,都是减一。
<?PHP
function gugu($hg)
{
if($hg==0){
return 1;
}else{
return $hg * gugu(--$hg);
}
}
echo gugu(3);
?> 如果是这样的话,应该是先减1,然后再给$hg的值,第一次是3*gugu(2),第二次是2*gugu(1),最后返回1,结果应该是6,怎么返回0.
$hg-1 没有改变$hg的值。而$hg--或者--$hg都改变了$hg的值。
首先分析 $hg--; 这是先用$hg再减1。也就是说每次都用的是 gogo(3).形成了死循环。
然后分析 --$hg; 这是先减1再用。
第1次:gogo(3) = 2*(gogo(2)); //
第2次:gogo(2) = 1*(gogo(1));
第3次:gogo(1) = 0*(gogo(0)) = 0*1 = 0;
首先分析 $hg--; 这是先用$hg再减1。也就是说每次都用的是 gogo(3).形成了死循环。
然后分析 --$hg; 这是先减1再用。
第1次:gogo(3) = 2*(gogo(2)); //
第2次:gogo(2) = 1*(gogo(1));
第3次:gogo(1) = 0*(gogo(0)) = 0*1 = 0;
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-02-10
$hg-- 或者 --$hg,已经把 $hg 的值改了,在同一个表达式中,$hg 的值是相同的,所以不会出正确结果。
$tmp = $hg;
return $tmp * gugu(--$hg);
就可以。
还可以这样
return ($tmp = $hg) * gugu(--$hg);
也能出正确结果。
不过不推荐这样的写法。
$tmp = $hg;
return $tmp * gugu(--$hg);
就可以。
还可以这样
return ($tmp = $hg) * gugu(--$hg);
也能出正确结果。
不过不推荐这样的写法。
第2个回答 2010-02-10
是的,把$hg-1 换成$hg--或者--$hg都不成,因为$hg--或者--$hg都会改变$hg自身的值,导致结果不正确。$hg-1只是把减一的值用做参数进行计算,本身变量的值不变的。
与楼上优先级无关。
与楼上优先级无关。
第3个回答 2010-02-10
--是一种优先级不同的表达式,你可以把$hg--或--$hg加括号试一下