鱼C论坛

 找回密码
 立即注册
查看: 4032|回复: 5

[已解决]求助,这个函数中return n*factroial(n-1) 返回的是什么呀

[复制链接]
发表于 2020-11-20 11:19:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
屏幕截图 2020-11-20 111058.jpg
求助,这个函数中return n*factroial(n-1) 返回的是什么呀,是n*factroial(n-1)吗,返回的东西又给谁啊,return 1 返回的1又给谁用啊,想了好久想不通,希望帮忙解释清楚点  谢谢
最佳答案
2020-11-20 21:38:12
zzh11 发表于 2020-11-20 20:52
请问调用的结果是什么


我感觉二楼三楼写的挺清楚的了啊。。没看懂?
那就在详细一点吧。编程更多还是要自己多思考啊

假设你输入的正整数是3,即number=3
那么执行 result =factorial(number),就会调用factorial,此时n=3,
第一次执行factorial,n=3,if判断,不满足条件,执行else后的语句,即return 3*factorial(3-1)
这时遇到函数调用,先去执行函数调用,即递归执行factorial(2)
      第二次执行factorial,n=2,if判断,不满足条件,执行else后的语句,即return 2*factorial(2-1)
      这时遇到函数调用,先去执行函数调用,即递归执行factorial(1)
            第三次执行factorial,n=1,if判断,满足条件,执行 return 1,函数返回 1,返回到上次调用的地方
            即返回到第三次调用的地方,继续执行 return 2*factorial(2-1),现在得到的是return 2*1,返回 2,返回到上次调用的地方
      即返回到第二次调用的地方,继续执行return 3*factorial(3-1),现在得到的是 return 3*2,返回6,返回上次调用的地方
即返回到第一次调用的地方,现在得到result=6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-20 11:27:31 | 显示全部楼层

回帖奖励 +1 鱼币



那实例举例子吧:

假设 n = 3 调用 factroial(n) 函数后:

factroial(3) --> if n == 1: --> False --> else --> return 3*factroial(3-1)

进入第一次递归:

factroial(2) --> if n == 1: --> False --> else --> return 2*factroial(2-1)

进入第二次递归:

factroial(1) --> if n == 1: --> True  --> return 1

递归结束,开始返回: 1*2*3 即 1 -->  2*factroial(2-1) -->  3*factroial(3-1)

1 返回给 factroial(2-1) ,然后 2*factroial(2-1) 相当于 2*1 返回给 factroial(3-1) 最后结果就为 3*2*1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 11:29:03 | 显示全部楼层
factorial(5) = 5 * factorial(4)
             = 5 * 4 * factorial(3)
             = 5 * 4 * 3 * factorial(2)
             = 5 * 4 * 3 * 2 * factorial(1)
             = 5 * 4 * 3 * 2 * 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 11:29:12 | 显示全部楼层
本帖最后由 sunrise085 于 2020-11-20 11:30 编辑

你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦

函数返回值返回的东西是给了调用的位置。例如你在第八行调用了factorial,然后调用函数发返回值就会返回到这里赋值给result。递归调用也是如此,在第五行递归调用factorial,那么调用的结果就会返回到这里并与n进行相乘运算

ps:下次请发代码,不要发截图,回答问题的人可没时间再敲一遍代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-20 20:52:00 | 显示全部楼层
sunrise085 发表于 2020-11-20 11:29
你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦

函数返回值返回的东西是给了调用 ...

请问调用的结果是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-20 21:38:12 | 显示全部楼层    本楼为最佳答案   
zzh11 发表于 2020-11-20 20:52
请问调用的结果是什么


我感觉二楼三楼写的挺清楚的了啊。。没看懂?
那就在详细一点吧。编程更多还是要自己多思考啊

假设你输入的正整数是3,即number=3
那么执行 result =factorial(number),就会调用factorial,此时n=3,
第一次执行factorial,n=3,if判断,不满足条件,执行else后的语句,即return 3*factorial(3-1)
这时遇到函数调用,先去执行函数调用,即递归执行factorial(2)
      第二次执行factorial,n=2,if判断,不满足条件,执行else后的语句,即return 2*factorial(2-1)
      这时遇到函数调用,先去执行函数调用,即递归执行factorial(1)
            第三次执行factorial,n=1,if判断,满足条件,执行 return 1,函数返回 1,返回到上次调用的地方
            即返回到第三次调用的地方,继续执行 return 2*factorial(2-1),现在得到的是return 2*1,返回 2,返回到上次调用的地方
      即返回到第二次调用的地方,继续执行return 3*factorial(3-1),现在得到的是 return 3*2,返回6,返回上次调用的地方
即返回到第一次调用的地方,现在得到result=6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 13:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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