计算阶乘的不同方法(递归和迭代)
阶乘(递归)
#include<stdio.h>
long Fact(int n)
{
if(n<0)
return -1;
else if(n==0||n==1)
return 1;
else
return(n*Fact(n-1));
}
int main()
{
int n;
long result;
printf("input n:");
scanf("%d",&n);
result=Fact(n);
if(result==-1)
{
printf("error!\n");
}
else
printf("%d!=%ld\n",n,result);
return 0;
}
斐波拉契数列(递归)
#include<stdio.h>
long Fib(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return(Fib(n-1)+Fib(n-2));
}
int main()
{
int n,x;
printf("input n:");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
x=Fib(i);
printf("Fib(%d)=%d\n",i,x);
}
return 0;
}
//迭代法 阶乘简单计算
#include<stdio.h>
long Fact(int n)
{
int i;
long result=1;
if(n<0)
{
printf("error!\n"); //不合理数据检测
}
else
{
for(i=2;i<=n;i++)
{
result=result*i;
}
}
return result;
}
int main()
{
int n;
long result;
printf("input n:");
scanf("%d",&n);
result=Fact(n);
printf("%d!=%ld\n",n,result);
}
#include<stdio.h>
long Fact(int n)
{
int i;
long result=1;
if(n<0)
{
return -1; //不合理数据检测
}
else
{
for(i=2;i<=n;i++)
{
result=result*i;
}
}
return result;
}
int main()
{
int n;
long ret;
printf("input n:");
scanf("%d",&n);
ret=Fact(n);
if(ret==-1)
{
printf("error!\n");
}
else
printf("%d!=%ld\n",n,ret);
}
函数入口参数合法性的检验+函数返回值的检验
#include<stdio.h>
unsigned long Fact(unsigned int n);//无符号整数定义
int main()
{
int n;
long ret;
printf("input n:");
scanf("%d",&n);
ret=Fact(n);
if(ret==-1)
{
printf("error!\n");
}
else
printf("%d!=%ld\n",n,ret);
return 0;
}
unsigned long Fact(unsigned int n)
{
unsigned int i;
unsigned long result=1;
if(n<0)
{
return -1; //不合理数据检测
}
else
{
for(i=2;i<=n;i++)
{
result=result*i;
}
}
return result;
}
函数入口参数合法性的检验+函数返回值的检验(修改)
//加入数据输入限制,确保输入的值是无符号整数
#include<stdio.h>
unsigned long Fact(unsigned int n);//无符号整数定义
int main()
{
int m;
do
{
printf("input m(m>0):");
scanf("%d",&m);
}
while(m<0); //加入数据输入限制,确保输入的值是无符号整数
//long ret;
//printf("input n:");
//scanf("%d",&n);
//ret=Fact(n);
//if(ret==-1)
//{
//printf("error!\n");
//}
//else
printf("%d!=%lu\n",m,Fact(m));
return 0;
}
unsigned long Fact(unsigned int n)
{
unsigned int i;
unsigned long result=1;
if(n<0)
{
return -1; //不合理数据检测
}
else
{
for(i=2;i<=n;i++)
{
result=result*i;
}
}
return result;
}