谁能解释一下这个C语言程序
C语言的递归函数应用longfun(intn){longf;if(n<0){printf("%d<0,inputerror.",n);}else{if(n==0||n==...
C语言的递归函数应用
long fun(int n)
{
long f;
if(n<0)
{
printf("%d<0,input error.",n);
}
else
{
if(n==0||n==1)
{
f=1;
}
else
{
f=fun(n-1)*n;
}
}
return(f);
}
main()
{
int n;
long a;
printf("input a inteager number:");
scanf("%d",&n);
a=fun(n);
printf("%d!=%ld",n,a);
getch();
}
其中的
else
{
f=fun(n-1)*n;
}
这一段不解?
如果我输入的是4,那么它是怎样计算1*2*3*4的值的? 展开
long fun(int n)
{
long f;
if(n<0)
{
printf("%d<0,input error.",n);
}
else
{
if(n==0||n==1)
{
f=1;
}
else
{
f=fun(n-1)*n;
}
}
return(f);
}
main()
{
int n;
long a;
printf("input a inteager number:");
scanf("%d",&n);
a=fun(n);
printf("%d!=%ld",n,a);
getch();
}
其中的
else
{
f=fun(n-1)*n;
}
这一段不解?
如果我输入的是4,那么它是怎样计算1*2*3*4的值的? 展开
展开全部
这是递归调用。也就是说,你输入的是4,会有一个返回值回到fun函数继续执行这个函数,直到return (f),结束这个函数。
当n=4,在fun函数中是执行f=fun(n-1)*n语句。而其中还有fun(n-1),这就关系递归调用了。将n-1的值也就是3,同上执行语句,以此类推就是4*3*2*1
当n=4,在fun函数中是执行f=fun(n-1)*n语句。而其中还有fun(n-1),这就关系递归调用了。将n-1的值也就是3,同上执行语句,以此类推就是4*3*2*1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自身调用,这就是递归啊。具体就是,进入递归前保存断点到堆栈,完成后返回断点。也就是说,4的时候调用n-1也就是3,再调用2,调用1,然后1的时候没有递归,一共用了3个堆栈空间,是4,3,2的断点,再分别按顺序返回断点运行,返回时带结果和参数,最后输出总结果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询