Ъγ:_小ツ雨oο 发表于 2017-7-8 10:58:51

递归else问题


p($re);
echo '<br>'; 这2句是废话
开始 时执行函数, 然后执行函数, num>5, 然后就执行
$re = $num*facto($num-1);//就是
$re = 5*facto(5-1) ,再然后就是   $re = 4*facto(4-1) ...
一直到$num = 2的时候$re = 2*facto(2-1)
就是: $re = 5*facto(5-1)*facto(4-1)*facto(3-1)*facto(2-1) == 5*4*3*2
下一次因为($num = 1) 不大于 1,条件不成立,, 此时$re = 120吗 ?
就不执行if判断了 执行else把$re 变成1
然后 返回 结束函数,
不是很明白为啥这里递归到最后明明结果是$re = 120, 又执行$re = 1这个操作,

有没有大神 帮我捋一下我的思路, 谢谢啦


json 发表于 2017-7-8 10:58:52

好像是对递归不大理解吧。
就是: $re = 5*facto(5-1)*facto(4-1)*facto(3-1)*facto(2-1) == 5*4*3*2
这里可能有点问题,应该是$re = 5*4*3*2*facto(1)
facto(5) = 5*facto(4) = 5*(4*facto(3))= ... =5*4*3*2*facto(1)
这里就必须知道facto(1) 等于多少了,所以有else $re=1,这个就是表明facto(1) = 1;的,所以才有120的答案。

小甲鱼 发表于 2017-7-8 11:41:11

你的意思是最后为啥显示两次 120 吗?

因为你是 echo facto(num: 5);

将 facto 最后的值多打印了一次~

Ъγ:_小ツ雨oο 发表于 2017-7-8 11:48:15

小甲鱼 发表于 2017-7-8 11:41
你的意思是最后为啥显示两次 120 吗?

因为你是 echo facto(num: 5);


小甲鱼老湿, 我这里想不明白,为啥要用else自调用结果都出来了是$re = 120, 但是下面又执行else,结果不是变成$re = 1了吗, 就把上面给覆盖了, , 不明白这个else作用是啥,
页: [1]
查看完整版本: 递归else问题