C语言 用递归实现阶乘
执行结果截图:
输入整数5,最后输出整数5的阶乘结果120,截图中展示了函数fact() 进行递归运算的过程。
如果输入整数5,那么函数fact()总共被调用了6次,其中1次是用于判断是否满足递归结束条件。

代码:
#include <stdio.h>
long fact(int num);
int count;
long fact(int num)
{
long result;
printf("fact(%d) loading... \nnum:%d result: %ld\n", num, num, result);
extern int count;
if(num > 0)
{
printf("Before the next level recursion of fact()... result: %ld\n", result);
/* 这行代码是对函数fact()的递归调用,是含递归运算的代码行;
* 这行代码会先执行fact(num - 1),也就是对fact进行递归式的调用,
* 也就是暂时不会执行该递归代码行其他的运算,
* 直到递归的结束条件num > 0满足后,
* 才开始从嵌套的最里层将返回值result返回给外一层的fact()
*/
result = num * fact(num - 1);
count++;
printf("Operating 'result = %d * result of fact(%d)' ...\nresult:%ld\n", num, count-1, result);
}
else
{
printf("\nNow num:%d which is not > 0\n", num);
printf("So no more further recursion of fact()...\n");
result = 1;
printf("set value of result to 1\n\n");
}
printf("fact(%d) returning result to upper level...\n", count);
return result;
}
int main(void)
{
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
printf("Inputted num:%d\n", num);
printf("\n%d的阶乘是:%ld\n", num, fact(num));
return 0;
}

浙公网安备 33010602011771号