求斐波那契(Fibonacci)数列的第n个数,即从键盘输入n则输出第n项的值,n从1开始。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和.例如1,1,2,3,5,8,13,21,......
循环算法 时间复杂度(O(n))
#include<stdio.h>
#include<time.h>
int fun( int n)
{
long long f1,f2,f3;
f1 = 1;
f2 = 1;
f3 = 1;
for (int i = 3; i <= n; i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int main()
{
int n
scanf("%d",n);//输入斐波那契数列长度
for (int i = 1; i < n; i++)
{
printf("%lld ", fun(i));
}
return 0;
}
递归算法 时间复杂度(O(2^n))
int fobin(int n)
{
if (n ==1||n==2)
return 1;
else
return fobin(n -1) + fobin(n-2);
}
int main()
{
int n;
scanf("%d",n);//输入斐波那契数列长度
for (int i = 1; i < n; i++)
{
printf("%lld ", fobin(i));
}
return 0;
}
斐波那契数列在递归的实现的状况下效率低下
当数列长度到达一定长度时循环和递归两种算法消耗时间差距很大很明显
当n=50时 循环速率明显大于递归
当斐波那契额数列长度很大时使用递归导致所占空间大于栈空间也会崩溃。因此斐波那契额数列不适用递归算法