#include<stdio.h>
#include<stdlib.h>
//递归
int JC(int n)
{
if (n==0){
return 1;
}
return n*JC(n - 1);
}
//非递归
int jc(int n)
{
int s=1;
int i;
if (n==0){
return 1;
}
else{
for(i=1;i<=n;i++){
s=i*s;
}
}
return s;
}
int main()
{
int a;
int n;
printf("\n 1.非递归 \n 2.递归\n 0.退出\n");
a=1;
while(a){
scanf("%d",&a);
switch(a){
case 1:
printf("enter a number:\n");
scanf("%d",&n);
printf("n的阶乘为:%d",jc(n));
break;
case 2:
printf("enter a number:\n");
scanf("%d",&n);
printf("n的阶乘为:%d",JC(n));
break;
case 0:
return 0;
default:
printf("序号输入错误!");
}
}
return 0;
}
出现阶乘为0或者为负值的情况可能是发生了溢出,可将int类型改为long型或者long long型
long long型运行结果: