转载并参考July的博客http://topic.youkuaiyun.com/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html,万分感谢!
题目:
定义Fibonacci数列如下:
0 n=0
f(n)=1 n=1,2
f(n-1)+f(n-2) n>2
输入n,用最快的方法求该数列的第n项
参考:http://blog.youkuaiyun.com/yuucyf/article/details/6625301
/*Title: 19.用最快的方法求斐波那契数列第n项:解一
Author: gocode
Date: 2012-10-17*/
#include <iostream>
using namespace std;
// 递归方法,时间复杂度O(n)
int Fibonacci1(int n)
{
if (n==0||n==1)
return n;
else
return Fibonacci1(n-1)+Fibonacci1(n-2);
}
// 额外空间循环方法,时间复杂度O(n)
int Fibonacci2(int n)
{
int result=0;
int a[2]={0,1};
if (n==0||n==1)
return n;
else
{
for (int i=1;i<n;i++)
{
result=a[0]+a[1];
a[0]=a[1];
a[1]=result;
}
}
return result;
}
int main()
{
cout<<Fibonacci2(5)<<endl;
cout<<Fibonacci1(5);
system("pause");
return 0;
}