QQ登录

只需一步,快速开始

搜索
鱼C论坛笔记大赛成绩公示
查看: 205|回复: 3

[已解决]递归else问题

[复制链接]
最佳答案
0 
累计签到:241 天
连续签到:1 天
发表于 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的答案。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
7 
累计签到:34 天
连续签到: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的答案。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
146 
累计签到:2186 天
连续签到:1 天
发表于 2017-7-8 11:41:11 | 显示全部楼层
你的意思是最后为啥显示两次 120 吗?

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

将 facto 最后的值多打印了一次~
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:241 天
连续签到:1 天
 楼主| 发表于 2017-7-8 11:48:15 | 显示全部楼层
小甲鱼 发表于 2017-7-8 11:41
你的意思是最后为啥显示两次 120 吗?

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

小甲鱼老湿, 我这里想不明白,  为啥要用else  自调用结果都出来了是$re = 120, 但是下面又执行else,结果不是变成$re = 1了吗, 就把上面给覆盖了, , 不明白这个else作用是啥,
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-9-25 12:31 Powered by Discuz! X2.5 Theme by dreambred

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