#include<stdio.h>
#include<stdlib.h>
long fact(int n)
{
long k;
if (n < 0)
{
printf("Data error!\n");
exit(0);
}
else if (n == 0 || n == 1) k = 1; //递归结束的标志
else k = n * fact(n - 1); //递归关系式
return k; //k是一个存储乘积的中间量,最终返还给f,
}
int main()
{
int n;
long f;
printf("please input an integral number:\n");
scanf_s("%d", &n);
f = fact(n);
printf("%d!=%ld\n",n,f);
return 0;
}
以下是递归调用的逻辑图,可见存在一个调用和回代的过程
“递归调用必须具备两个要素:递归调用公式,即问题的解决能够写成递归调用形式;结束条件,即确定何时结束递归”