斐波拉契数是指一个数组中从第三个起,一个数等于他前两位数的和,由这样的有序数列叫斐波拉契数列。例如 //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
}