c语言 求第n个数的斐波拉契数

斐波拉契数是指一个数组中从第三个起,一个数等于他前两位数的和,由这样的有序数列叫斐波拉契数列。例如  //1 2 3 5 8 13 21 34 55 89   这就是1-10的斐波拉契数。

而在算法中如何求得斐波拉契数需要知道最基本的定义,然后再写算法。

在斐波拉契数中,第一和第二位的元素是固定的,第三位和以后的位数是由前两位相加所得,算法思路是  先判断输入的数是否是1 和2 如果是,直接返回应有的值,在大于三后,则定义三个变量,先将后前两个变量的值赋给地三个变量,作为最后的返回值,然后将前两个变量的值和第三个变量的值进行交换,为下一轮的循环做准备,如果下一轮的 i 值还是大于2,则继续进行循环,知道等于2,完成第n个斐波拉契数的查找。

#include<stdio.h>
int fibe(int num)
{
	int sub1 = 1;
	int sub2 = 2;
	int ant = 0;
	int i = 0;
	if (num == 1)
		return 1;
	if (num == 2)
		return 2;
	if (num>2)
	{
		for (i = num; i > 2; i--)
		{
			ant = sub1 + sub2;
			sub1 = sub2;
			sub2 = ant;
		}
	}
	return ant;
}
int main()
{
	int n = 0;
	scanf_s("%d", &n);
	int tmp = 0;
	tmp = fibe(n);//1 2 3 5 8 13 21 34 55 89 
	printf("%d\n", tmp);
	system("pause");
	return 0;
}

       除了利用这种普通的方式进行斐波拉契数的求取,还可以通过函数递归的方式实现斐波拉契数的求取,思路和上边的方法的思路是一样的,先是判断是否小于3,如果小于3,正常输出,反之进入函数,实现函数递归,

#include<stdio.h>
int fibe(num, tmp1,tmp2,fib)
{
		if (num > 0)
		{
			fib = tmp1 + tmp2;
			tmp1 = tmp2;
			tmp2 = fib;
			num--;
			return fibe(num, tmp1, tmp2, fib);
		}
		else
		{
			return fib;
		}
}
int main()
{
	int fib = 0;
	int b = 0;
	int a = 0;
	int ant1 = 1;
	int ant2 = 2;
	scanf_s("%d", &a);
	if (a <= 2)
	{
		printf("%d", a); 
	}
	else
	{
		a = a - 2;
		b = fibe(a, ant1, ant2, fib);
		printf("%d", b);
	}
	system("pause");
	return 0;//1 2 3 5 8 13 21 34 55 89 
}
 

猜你喜欢

转载自blog.csdn.net/f_shell_x/article/details/81319682
今日推荐