阶乘和斐波拉契数列的实现(递归和迭代+相关程序修改

计算阶乘的不同方法(递归和迭代

阶乘(递归)

#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;
}

猜你喜欢

转载自blog.csdn.net/CSDN447447LJH/article/details/90965486