C语言实现费氏数列

此题面试时会常常考到,费氏数列的实现规则如下:

假定n=10,那么输出十个费氏数列

首先要明白费氏数列的实现规则,第一:假定n=10的情况下,那么实现规则如下:

1 1 2 3 5 8 13 21 34 55 89

不知道有没有发现规律,规律就是每次的新值都会和前一个相加,而前面会打印两次1是因为费氏数列每次都从1开始计算,第一次是1但是1前面没有任何可加值所以1+0还是=1,但是到了第三次,1前面已经有了一个1,所以1+1=2,第四次就是2+1=3,第三次就是3+2=5,按照这个规律就形成了费氏数列,那么用编程来做一般面试题会让你写多个回圈(循环)实现方式,比如递归,典型循环,goto,这里博主全部给实现了一下:

1.for循环实现:

int main(){
//要求用户输入费氏数列大小
	int n = 0;
	printf("请输入费氏数列的大小:");
	scanf("%d", &n);
	if (n <= 0){
		printf("费氏数列大小错误!");
		return 0;
	}
	//开始计算费氏数列
	int s = 0;	//用于存储费氏数列的前值
	int s1 = 1;	//费氏数列新值,注意起始值是1,所以新值一定从1开始
	int f = 1;	//费氏数列结果值,赋值1是因为打印顺序原因
	for (int i = 0; i <= n; ++i){
		printf("%d ", f);
		f = s + s1;	//计算前值与新值相加结果,并保存新值
		s = s1;	//保存前值
		s1 = f;	//保存新值
	}
	getchar();	//吃掉空格
	getchar();
	return 0;
}


//while

int main(){
//要求用户输入费氏数列大小
	int n = 0;
	printf("请输入费氏数列的大小:");
	scanf("%d", &n);
	if (n <= 0){
		printf("费氏数列大小错误!");
		return 0;
	}
	//开始计算费氏数列
	int s = 0;	//用于存储费氏数列的前值
	int s1 = 1;	//费氏数列新值,注意起始值是1,所以新值一定从1开始
	int f = 1;	//费氏数列结果值,赋值1是因为打印顺序原因
	int i = 0;
	while(i<=n){
		printf("%d ", f);
		f = s + s1;	//计算前值与新值相加结果,并保存新值
		s = s1;	//保存前值
		s1 = f;	//保存新值
		++i;	//while
	}
	getchar();	//吃掉空格
	getchar();
	return 0;
}

//go to

int main(){
//要求用户输入费氏数列大小
	int n = 0;
	printf("请输入费氏数列的大小:");
	scanf("%d", &n);
	if (n <= 0){
		printf("费氏数列大小错误!");
		return 0;
	}
	//开始计算费氏数列
	int s = 0;	//用于存储费氏数列的前值
	int s1 = 1;	//费氏数列新值,注意起始值是1,所以新值一定从1开始
	int f = 1;	//费氏数列结果值,赋值1是因为打印顺序原因
	int i = 0;
	num0:
	if (i <= n){
		goto num1;
	}
	else{
		goto num2;
	}
	num1:
		printf("%d ", f);
		f = s + s1;	//计算前值与新值相加结果,并保存新值
		s = s1;	//保存前值
		s1 = f;	//保存新值
		++i;	//goto
		goto num0;
	num2:
	getchar();	//吃掉空格
	getchar();
	return 0;
}

3. 递归实现

int func(int n){
	//递归静态变量
	static int s = 0;	//用于存储费氏数列的前值
	static int s1 = 1;	//费氏数列新值,注意起始值是1,所以新值一定从1开始
	static int f = 1;	//费氏数列结果值,赋值1是因为打印顺序原因
	if (n <= 0){
		return 0;
	}
	else{
		f = s + s1;	//计算前值与新值相加结果,并保存新值
		s = s1;	//保存前值
		s1 = f;	//保存新值
		printf("%d ", f);
		return func(n - 1);
	}
	
}
int main()
{
	//要求用户输入费氏数列大小
	int n = 0;
	printf("请输入费氏数列的大小:");
	scanf("%d", &n);
	if (n <= 0){
		printf("费氏数列大小错误!");
		return 0;
	}
	func(n);
	getchar();	/[表情]掉空格
	getchar();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bjbz_cxy/article/details/80829717