面试100题:19.用最快的方法求斐波那契数列第n项

来源:互联网 发布:淘宝图片空间已清空 编辑:程序博客网 时间:2024/05/19 05:30

题目

定义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

  1. /*Title: 19.用最快的方法求斐波那契数列第n项:解一 
  2. Author:  gocode 
  3. Date:    2012-10-17*/  
  4.    
  5. #include <iostream>  
  6. using namespace std;  
  7.    
  8. // 递归方法,时间复杂度O(n)  
  9. int Fibonacci1(int n)  
  10. {  
  11.     if (n==0||n==1)  
  12.         return n;  
  13.     else  
  14.         return Fibonacci1(n-1)+Fibonacci1(n-2);  
  15. }  
  16.    
  17. // 额外空间循环方法,时间复杂度O(n)  
  18. int Fibonacci2(int n)  
  19. {  
  20.     int result=0;  
  21.     int a[2]={0,1};  
  22.     if (n==0||n==1)  
  23.         return n;  
  24.     else  
  25.     {  
  26.         for (int i=1;i<n;i++)  
  27.         {  
  28.             result=a[0]+a[1];  
  29.             a[0]=a[1];  
  30.             a[1]=result;  
  31.         }  
  32.     }  
  33.     return result;  
  34. }  
  35. int main()  
  36. {  
  37.     cout<<Fibonacci2(5)<<endl;  
  38.     cout<<Fibonacci1(5);  
  39.     system("pause");  
  40.     return 0;  
  41. }  
0 0
原创粉丝点击