Bootstrap

【c语言】递归迭代简单练习题(n的阶乘 +斐波那契数列)

1.n的阶乘

//一递归、
 #include <stdio.h>
#include <string.h> 
 
int fac(int n){
	if(n<=1)
		return 1;
	else
		return n*fac(n-1);
}
int main(){
	int n=0;
	printf("请输入要计算n的阶乘中n的值:");
	scanf("%d",&n);
	int ret=fac(n);
	printf("%d的阶乘为%d",n,ret);
	return 0;
}
//二、迭代(循环)
#include <stdio.h>
#include <string.h> 
int fac(int n){	
	int ret=1;
	for(int i=n;i>=1;i--){
		ret=ret*i;	
	}
	return ret;
}
int main(){
	int n=0;
	printf("请输入要计算n的阶乘中n的值:");
	scanf("%d",&n);
	int ret=fac(n);
	printf("%d的阶乘为%d",n,ret);
	return 0;
}

2.斐波那契数列(不考虑溢出现象)

(1 1 2 3 5…………前两位都为1,从第三位开始,都等于前两位之和)

 //一递归、
  #include <stdio.h>
#include <string.h> 
int Fib(int n){	
	if(n<=2)
		return 1;
	else	
		return Fib(n-1)+Fib(n-2);
}
int main(){
	int n=0;
	printf("请输入要计算斐波那契数列的第几位:");
	scanf("%d",&n);
	int ret=Fib(n);
	printf("斐波那契数列的第%d位为%d",n,ret);
	return 0;
}  
二、迭代(循环)计算速度快 ,但是容易发生溢出现象 
#include <stdio.h>
#include <string.h> 
int Fib(int n)
{	
	int a=1;//第一位数 
	int b=1;//第二位数 
	int c=1;//令c为1,因为当n小于3时,返回都为1 
	while(n>=3){
		c=a+b;//第三位数 
		a=b;//让第一位数等于第二位,依次推 
		b=c;	
		n--;
	}
	return c;
}
int main(){
	int n=0;
	printf("请输入要计算斐波那契数列的第几位:");
	scanf("%d",&n);
	int ret=Fib(n);
	printf("斐波那契数列的第%d位为%d",n,ret);
	return 0;
} 

;