#include<stdio.h>
//1.递归
//int fibonacci(int input)
//{
// if (input < 3)
// return 1;
// else
// return fibonacci(input - 1) + fibonacci(input - 2);
// //return input < 2 ? input : fibonacci(input - 1)+fibonacci(input-2);
//}
//2.函数
int fibonacci(int input)
{
if (input < 3)
return 1;
int a = 1, b = 1, i;
for (i = 3; i <= input; i++)
{
int tmp = a + b;
a = b;
b = tmp;
}
return b;
}
int main()
{
int input;
printf("请输入求第几个斐波那契数:>");
scanf("%d", &input);
int ret = fibonacci(input);
printf("第%d个斐波那契数是:%d", input, ret);
return 0;
}
斐波那契数列:1,1,2,3,5,8,13,21,34,55......在第三个数之后,每个数是前两个数加起来组成的数列就是斐波那契数列
1.递归
比如说要求第5个斐波那契数,就要先找第4,3个斐波那契数,而找第4个斐波那契数就要先找第3,2个斐波那契数,找第3个斐波那契数就要先找第1,2个斐波那契数,显而易见,随着要找的斐波那契数的增大,递归的次数就越多,比如说找第50个斐波那契数,一时半会是不会得到的
它就会像这样不动,一直在进行运算, 所以可以看出,递归用来计算过大的斐波那契数列是不合适的,时间复杂度较大,但是比较节省空间。
最终得出的值是个负数是因为他的真实值超出了int的范畴,按二进制形式就会导致输出的值是个负数,可以使用longlong计算
2.函数
使用函数的思想就是把要求的那个斐波那契数之前的都求一遍即可
使用这种方法即使是求第100个斐波那契数也能很快就求出来,但是会使用空间,也就是说以空间换时间