为了账号安全,请及时绑定邮箱和手机立即绑定

求解问题呀

为什么result=factorial(n-1)*n  就代表阶乘呢?

是不是factorial就代表阶乘函数

factorial(n-1)*n 相当于!(n-1)*n


正在回答

2 回答

这样说吧,就拿例题为例,求5!,在自定义函数中他有一次调用自己,那么就要从函数头开始运行。首先factorial(n-1)*n表示的就是4*5,接着调用自己factorial(n-1),那么factorial(n-1)*n就表示3*4*5,一次类推,2*3*4*5,1*2*3*4*5,0*1*2*3*4*5,-1*0*1*2*3*4*5。。。。。在自定义函数中我们知道当n<0时,return 0,那么n=0或1时,result=1,那么就不存在 0*1*2*3*4*5,-1*0*1*2*3*4*5。。。。。后面陆续的应该时1*1*2*3*4*5,1*1*1*2*3*4*5。。。。你想,这样是不是就可以简单的看成1*2*3*4*5,不就表示5的阶乘么。望采纳

1 回复 有任何疑惑可以回复我~
#1

慕丝6464244 提问者

非常感谢!
2018-06-21 回复 有任何疑惑可以回复我~
#2

慕莱坞2287185

可是if else又不是循环结构,为什么会反复调用啊,不应该在5*4的时候就return了么,为什么会继续*3*2*1啊?
2018-07-29 回复 有任何疑惑可以回复我~
#3

天然的纯指挥 回复 慕莱坞2287185

之所以会循环,是因为result=factorial(n-1)*n;中,结构是:把factorial(n-1)这个函数的值*n,得到的结果赋值给result,调用了函数factorial(n-1),而收到调用指令后,就会从头开始执行函数factorial(n-1),下一次会执行调用函数factorial(n-2),以此类推,直到当n=1时,进入else if(n==0 || n==1)的执行代码块结束跳出循环,然后执行return result;把值返回给自定义函数
2018-08-19 回复 有任何疑惑可以回复我~
#4

天然的纯指挥 回复 慕莱坞2287185

关于如何跳出循环的问题解释如下: else if(n==0 || n==1)语句中result=1;不是最后一步执行,而是在阶乘中最后被调用 result=factorial(n-1)*n;当到这一步时,先调用函数factorial(n-1)的值,然后调用factorial(n-2)的值 一直到最后调用到result=1(这里的调用当然会使result变为1,但后面还有最后一步result的运算),将1这个值拿来进行运算,循环结构中最后执行的一步是:result=factorial(n-1)*n;
2018-08-19 回复 有任何疑惑可以回复我~
#5

天然的纯指挥 回复 慕莱坞2287185

假设n=5,那么最后执行的一步就是result=1*2*3*4*5;执行后跳出if,执行return result;
2018-08-19 回复 有任何疑惑可以回复我~
#6

天然的纯指挥 回复 慕莱坞2287185

不好意思,“直到当n=1时,进入else if(n==0 || n==1)的执行代码块结束跳出循环”这句话错了,正确解释在上面回复啦
2018-08-19 回复 有任何疑惑可以回复我~
查看3条回复

请教一下

那程序 result 会不会返回值的时候,不会返回成1吗?result之前的值不会被覆盖?

0 回复 有任何疑惑可以回复我~
#1

天然的纯指挥

个人看法:题目中的教学图片else if(n==0 || n==1)的代码块给错了,应该是return 1;表示结束,而不是result=1; 参考问答和评论里给的答案代码,都是写的return 1;来结束循环
2018-08-19 回复 有任何疑惑可以回复我~
#2

天然的纯指挥

前一条评论可能错误了,你的问题具体原因我也不太清楚,抱歉打扰了
2018-08-19 回复 有任何疑惑可以回复我~
#3

天然的纯指挥

仔细重新看了一遍,是这样的: else if(n==0 || n==1)语句中result=1;不是最后一步执行,而是在阶乘中最后被调用 result=factorial(n-1)*n;当到这一步时,先调用函数factorial(n-1)的值,然后调用factorial(n-2)的值 一直到最后调用到result=1(这里的调用当然会使result变为1,但后面还有最后一步result的运算),将1这个值拿来进行运算,循环结构中最后执行的一步是:result=factorial(n-1)*n;
2018-08-19 回复 有任何疑惑可以回复我~
#4

天然的纯指挥

假设n=5,那么最后执行的一步就是result=1*2*3*4*5;执行后跳出if,执行return result;
2018-08-19 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
C语言入门
  • 参与学习       926020    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

求解问题呀

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信