今天看了递归的思想,写了一个用递归方法求n!的程序(程序1),又写了一个用for循环求n!的程序(程序2),个人认为两者的效率没有实质性的差别,代码的复杂程度也相同,我对计算机编译原理不是很熟悉,这两个程序正的像我想象的那样吗?他们有什么区别,哪个更有优势,有点在哪里,什么情况递归适用,什么情况for适用。请大家帮我看看。
代码如下(程序已经编译运行成功)
程序1
#include
int main()
{
int factorial(int n);
int n;
char cExit;
while(1)
{
printf("请输入n的值!\n");
scanf("%d",&n);
printf("%d的阶乘为%d\n",n,factorial(n));
printf("按任意键继续,退出请按'x'\n");
cExit=getchar();
cExit=getchar();
if(cExit=='x'||cExit=='X')
break;
}
return 0;
}
int factorial(int n)
{
int a;
if(n1)
a=factorial(n-1)*n;
return a;
}
程序2
#include
int main()
{
int n,p,i;
char cExit;
while(1)
{
p=1;
printf("请输入n的值!\n");
scanf("%d",&n);
if(n<0)
{
printf("输入的数据有误!\n");
break;
}
else if(n==0||n==1)
p=1;
else
for(i=2;i<=n;i++)
p=p*i;
printf("n!=%d\n",p);
printf("按任意键继续,按x退出!\n");
cExit=getchar();
cExit=getchar();
if(cExit=='x'||cExit=='X')
break;
}
return 0;
}
|