鱼C论坛

 找回密码
 立即注册
查看: 3374|回复: 3

[已解决]递归else问题

[复制链接]
发表于 2017-7-8 10:58:51 | 显示全部楼层 |阅读模式
10鱼币
QQ截图20170708104030.png
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这个操作,

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


最佳答案
2017-7-8 10:58:52
好像是对递归不大理解吧。
就是: $re = 5*facto(5-1)*facto(4-1)*facto(3-1)*facto(2-1) == 5*4*3*2

这里可能有点问题,应该是
  1. $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的答案。

最佳答案

查看完整内容

好像是对递归不大理解吧。 这里可能有点问题,应该是 facto(5) = 5*facto(4) = 5*(4*facto(3))= ... =5*4*3*2*facto(1) 这里就必须知道facto(1) 等于多少了,所以有else $re=1,这个就是表明facto(1) = 1;的,所以才有120的答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-8 10:58:52 | 显示全部楼层    本楼为最佳答案   
好像是对递归不大理解吧。
就是: $re = 5*facto(5-1)*facto(4-1)*facto(3-1)*facto(2-1) == 5*4*3*2

这里可能有点问题,应该是
  1. $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的答案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-8 11:41:11 | 显示全部楼层
你的意思是最后为啥显示两次 120 吗?

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

将 facto 最后的值多打印了一次~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-8 11:48:15 | 显示全部楼层
小甲鱼 发表于 2017-7-8 11:41
你的意思是最后为啥显示两次 120 吗?

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

小甲鱼老湿, 我这里想不明白,  为啥要用else  自调用结果都出来了是$re = 120, 但是下面又执行else,结果不是变成$re = 1了吗, 就把上面给覆盖了, , 不明白这个else作用是啥,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表