递归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这个操作,
有没有大神 帮我捋一下我的思路, 谢谢啦
好像是对递归不大理解吧。
就是: $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的答案。 你的意思是最后为啥显示两次 120 吗?
因为你是 echo facto(num: 5);
将 facto 最后的值多打印了一次~ 小甲鱼 发表于 2017-7-8 11:41
你的意思是最后为啥显示两次 120 吗?
因为你是 echo facto(num: 5);
小甲鱼老湿, 我这里想不明白,为啥要用else自调用结果都出来了是$re = 120, 但是下面又执行else,结果不是变成$re = 1了吗, 就把上面给覆盖了, , 不明白这个else作用是啥,
页:
[1]