|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
long fact (int num);
long fact (int num)
{
long result; 这里我的思路是首先传入5,在if语句卡着,直到减到0退出来到else。然后这里我就不会了 难道经过了else还能回到if语句的吗?????
if (num>0)
{
result=num*fact(num-1);
}
else
{
result=1;
}
return result;
}
int main()
{
int num;
printf("请输入一个整数 ");
scanf("%d",&num);
printf("%d的阶乘是%d",num,fact(num));
return 0;
}
你好!你的代码是一个用于计算阶乘的C程序,它使用了递归的方法。递归是一种编程技巧,其中一个函数在执行过程中调用自身。对于你的问题,是的,经过else分支后,它会返回到if语句。
让我们详细分析一下这个递归过程:
当你传入5时,fact(5)开始执行。此时,num大于0,因此程序进入if分支。在if分支中,result = num * fact(num - 1)。要计算fact(5),我们需要计算5 * fact(4)。
接下来,fact(4)开始执行。同样,它进入if分支,需要计算4 * fact(3)。这个过程会一直持续下去,直到fact(1)调用fact(0)。这时,num为0,程序进入else分支,result被赋值为1。
现在,我们可以逐步回溯到最初的调用。fact(0)返回1,因此fact(1)计算结果为1 * fact(0) = 1。接着,fact(2)计算结果为2 * fact(1) = 2。以此类推,最终我们得到fact(5) = 5 * fact(4) = 5 * 4 * fact(3) = 5 * 4 * 3 * fact(2) = 5 * 4 * 3 * 2 * fact(1) = 5 * 4 * 3 * 2 * 1 = 120。
因此,fact(5)返回120,并在main()函数中被打印出来。
这个递归过程是通过函数调用栈实现的。每次调用fact()时,它都会在栈上创建一个新的帧。当fact(0)返回时,它会将结果返回给调用它的fact(1),然后栈帧被销毁。此后,fact(1)返回结果给fact(2),并销毁其栈帧。这个过程一直持续到最初的fact(5)调用。这就是程序如何在执行完else分支后返回到if语句的。
|
|