c语言递归求阶乘

谁能帮我解释一下两个return的目的看不懂第二个... 谁能帮我解释一下两个return 的目的 看不懂第二个 展开
 我来答
问明6E
高粉答主

2019-06-03 · 每个回答都超有意思的
知道答主
回答量:279
采纳率:100%
帮助的人:12.3万
展开全部

举例:用递归方法求n;

#include<stdio.h>

int main()

{

int n;

int y;

printf("input a integer number:");

scanf("%d",&n);

y=fac(n);

printf("%d!=%d\n",n,y);

return 0;

}

int fac(int n)

{

int f;

if(n<0)

printf("n<0,data error!");

else if(n==0||n==1)

f=1;

else

f=fac(n-1)*n;

return(f);

}

扩展资料:

return用法:

return返回一个数值的意思就是把return&lt;表达式&gt;后面表达式的值返回给调用他的函数。举个例子:

int sum(int i,int j)

{

return i+j;

printf("这个语句不会被执行,因为该子函数执行到上面的return语句就无条件结束了");

}

main()

{

int a=10,b=11,c;

c=sum(a,b);

printf("%d",c);

}

程序的输出为:

21

这个21从何而来呢main函数调用sum(a,b)函数时将a的值赋给i,b的值赋给j,上面说了return i+j;会计算i+j的值也就是结果等于21,并将21带回给调用它的函数,即c=sum(a,b);相当于c=21,这个21就是由sum(a,b)中的return反回来的。

风若远去何人留
推荐于2017-09-10 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450102
专业C/C++软件开发

向TA提问 私信TA
展开全部

n的阶乘,就是从1开始乘到n,即1*2*3*...*(n-1)*n。

即n!=1*2*3*...*(n-1)*n。

而(n-1)!=1*2*3*...*(n-1)。

所以可以得出,n!=(n-1)! * n。

由这个概念,可以得出递归求阶乘函数fact的算法:

1 如果传入参数为0或1,返回1;

2 对于任意的n,返回n*fact(n-1)。


代码如下:

int fact(int n)
{
    if(n == 0 || n == 1) return 1;
    return n*(fact(n-1));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lemoontree
2020-11-13
知道答主
回答量:63
采纳率:0%
帮助的人:6.9万
展开全部

递归求阶乘

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-03-03 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6339万
展开全部
第二个就是主函数啊,它用10调用了fun函数,就是求10的阶乘,输出为10!=3628800。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
200815147
2014-03-03 · TA获得超过1450个赞
知道小有建树答主
回答量:289
采纳率:100%
帮助的人:79.3万
展开全部
第一个return求的是n>1时的阶乘,这样一层一层地找下去,处理递归并返回结果。第二个return前面省略了else,也就是当不满足n>1这个条件时执行的,是判断递归的边界,返回的是1的阶乘的答案,如果没有这个return,递归就没有边界,一直进行下去,就会造成栈溢出。
PS:我也是刚学,说的可能不是很好,希望对你有帮助!
追问
调用函数fun,将10传递给函数,在第一个return中不停调用fun求得10*9*8*7*6*5*4*3*2  然后再将1传递给函数fun(),因为不满足n>1,所以执行return 1 语句,我是想问这里的return 1是返回到第一个return语句中还是主函数main?
追答
是返回到第一个return语句中,因为它已经处理完了fun(1),所以就往上一层fun(2)了。递归的过程是:fun(1)的值回代给fun(2),fun(2)的值回代给fun(3)……直到求出fun(10)=3628800。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式