function gugu($hg)
{
if($hg==0){
return 1;
}else{
return $hg * gugu($hg-1);
}
}
echo gugu(3);
?>
这是一个能正常运行的递归函数,如果我把$hg-1 换成$hg--或者--$hg,为什么实现不了这个效果呢?我感觉都是一样的,都是减一。
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.
Php 递归函数
答案:4 悬赏:70 手机版
解决时间 2021-12-26 15:33
- 提问者网友:精神病院里
- 2021-12-25 20:43
最佳答案
- 五星知识达人网友:零点过十分
- 2022-01-22 02:36
$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楼网友:上分大魔王
- 2022-01-22 05:01
因为你最后一个echo $n的问题。
function test($n) {
echo $n." ";
if($n>0)
test($n-1);
else
echo "<-->";
echo $n." ";
}
当==10的时候, 进入test(9), 这个函数执行完毕后,需要执行echo $n." ";;问题是test(9)也是个递归,所以一直到test(1)才可能执行 echo $n." ";, 依次往上返回。
- 2楼网友:底特律间谍
- 2022-01-22 04:05
是的,把$hg-1 换成$hg--或者--$hg都不成,因为$hg--或者--$hg都会改变$hg自身的值,导致结果不正确。$hg-1只是把减一的值用做参数进行计算,本身变量的值不变的。
与楼上优先级无关。
- 3楼网友:蓝房子
- 2022-01-22 03:15
$hg-- 或者 --$hg,已经把 $hg 的值改了,在同一个表达式中,$hg 的值是相同的,所以不会出正确结果。
$tmp = $hg;
return $tmp * gugu(--$hg);
就可以。
还可以这样
return ($tmp = $hg) * gugu(--$hg);
也能出正确结果。
不过不推荐这样的写法。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯