永发信息网

Php 递归函数

答案:4  悬赏:70  手机版
解决时间 2021-12-26 15:33
  • 提问者网友:精神病院里
  • 2021-12-25 20:43
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.
最佳答案
  • 五星知识达人网友:零点过十分
  • 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;
全部回答
  • 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); 也能出正确结果。 不过不推荐这样的写法。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯