永发信息网

Php 递归函数

答案:4  悬赏:70  手机版
解决时间 2021-12-26 15:33
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.
最佳答案
$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;
全部回答
因为你最后一个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." ";, 依次往上返回。
是的,把$hg-1 换成$hg--或者--$hg都不成,因为$hg--或者--$hg都会改变$hg自身的值,导致结果不正确。$hg-1只是把减一的值用做参数进行计算,本身变量的值不变的。 与楼上优先级无关。
$hg-- 或者 --$hg,已经把 $hg 的值改了,在同一个表达式中,$hg 的值是相同的,所以不会出正确结果。 $tmp = $hg; return $tmp * gugu(--$hg); 就可以。 还可以这样 return ($tmp = $hg) * gugu(--$hg); 也能出正确结果。 不过不推荐这样的写法。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
刚刚开学 总觉得别人都好开心 可我老感觉特别
哪个牌子的制冰机质量比较好?
周杰伦《蛇舞》中间的吉他是什么和弦?
判断题因为42÷6=7,所以6和7都是因数.
智爱母婴坊禅堂店这个地址在什么地方,我要处
单选题下列有关玻璃的说法中,正确的是A.石英
功新月嫂地址在什么地方,想过去办事,
摩羯座女怎么挽回天平男
营改增对企业的影响
在酷狗音乐播放器里怎么找网友电台??
自来水欠费了,水厂是怎么精确对欠费用户停水
社保的钱都去哪了?
有哪些很好听,很HIPHOP的电话铃音
窦娥的丈夫叫什么名字?
给我女孩改名.2006年2月15日20点15分出生请为
推荐资讯
形容词变比较级自编一个chant
奥拉星多多卡卡号和密码谁能给我一个?
我把钱转到支付宝卡里去了,不是余额宝,现在
山东省学护理比较好的学校?
单位漏交1个月的社保,该怎么补给员工(武汉
广州番禺职业技术学院 辅导员的工资如何?
上证关键点位如何知道?
两张显卡运用的问题...............
台式电脑主机的开机排线怎么插?
有一款游戏是通过连线把黑棋变成白棋或白棋变
若多项式x2+2kxy-3y2+x-12不含xy的项,求k3-1
单选题军机处的设立标志着我国古代君主专制制
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?