题目:
定义Fibonacci数列如下:
0 n=0
f(n)=1 n=1,2
f(n-1)+f(n-2) n>2
输入n,用最快的方法求该数列的第n项
参考:http://blog.csdn.net/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;
- }