• 9.求斐波那契Fibonacci数列通项


    (1)递归实现:
     
    #include<iostream>
    using namespace std;
    int Fibonacci(int);
    
    int main()
    {
        int n;
        cout<<"please input an number n: "<<endl;
        cin>>n;
    
    
        for(int i=1;i<=n;i++)
        {
            cout<<Fibonacci(i)<<endl;
        }
        return 0;
    }
    
    int Fibonacci(int n)//运用递归求斐波那契数列
    {
        if(n<3)
        {
            return 1;
        }else
        {
            return Fibonacci(n-1)+Fibonacci(n-2);
        }
    }
    (2)数组实现:明显感觉数组效率要高很多
     
    #include<iostream>
    using namespace std;
    int Fibonacci(int);
    
    int main()
    {
        int n;
        cout<<"please input an number: "<<endl;
        cin>>n;
        cout<<Fibonacci(n);
        return 0;
    }
    
    int Fibonacci(int n)
    {
        if(n<1)
        {
            return -1;
        }
        if(n<3)
        {
            return 1;
        }
        int *a=new int[n];//开辟一块内存空间
        a[0]=a[1]=1;
        for(int i=2;i<n;i++)
        {
            a[i]=a[i-1]+a[i-2];
        }
        for(int j=0;j<n;j++)//输出所求数组
        {
            cout<<a[j]<<endl;
        }
    }
    (3)运用向量:
     
    #include<iostream>
    #include<vector>//使用向量须声明
    using namespace std;
    int Fibonacci(int);
    
    int main()
    {
        int n;
        cout<<"please input an number: "<<endl;
        cin>>n;
    
        cout<<Fibonacci(n)<<endl;
    
        return 0;
    }
    
    int Fibonacci(int index)           //借用vector<int>实现
    {
     if(index<1)
     {
      return -1;
     }
     vector<int> a(2,1);      //创建一个含有2个元素都为1的向量
     a.reserve(3);//reserve(size)为当前vector预留至少共容纳size个元素的空间
     for(int i=2;i<index;i++)
     {
      a.insert(a.begin(),a.at(0)+a.at(1));
      a.pop_back();//pop_back()函数删除当前vector最末的一个元素
     }
     return a.at(0);//at() 函数 返回当前Vector指定位置loc的元素的引用
    }
    (4)使用队列:
     
    #include<iostream>
    #include<queue>//使用队列须声明
    using namespace std;
    int Fibonacci(int);
    
    int main()
    {
        int n;
        cout<<"please input an number: "<<endl;
        cin>>n;
    
        cout<<Fibonacci(n)<<endl;
    
        return 0;
    }
    
    int Fibonacci(int index)       //队列实现
    {
     if(index<1)
     {
      return -1;
     }
     queue<int>q;
     q.push(1);
     q.push(1);
     for(int i=2;i<index;i++)
     {
      q.push(q.front()+q.back());
      q.pop();
     }
     return q.back();
    }
    (5)迭代法:
     
    #include<iostream>
    using namespace std;
    int Fibonacci(int);
    
    int main()
    {
        int n;
        cout<<"please input an number: "<<endl;
        cin>>n;
    
        cout<<Fibonacci(n)<<endl;
    
        return 0;
    }
    
    int Fibonacci(int n) 
    {
     int i,a=1,b=1,c=1;
     if(n<1)
     {
      return -1;
     }
     for(i=2;i<n;i++)
     {
      c=a+b;     //辗转相加法(类似于求最大公约数的辗转相除法)
      a=b;
      b=c;
     }
     return c;
    }
    (6)二分矩阵方法(我自己还不怎么懂。。。)
  • 相关阅读:
    Scraping JavaScript webpages with webkit | WebScraping.com
    linux命令行抓取网页快照-(xvfb+CutyCapt)
    Xvfb+YSlow+ShowSlow搭建前端性能测试框架
    Lind.DDD.Paging分页模块介绍
    Lind.DDD.IoC依赖注入与面向方面的实现
    Lind.DDD.Caching分布式数据集缓存介绍
    Lind.DDD.Events领域事件介绍
    知方可补不足~sqlserver中的几把锁~续
    BUG: scheduling while atomic: events/0/4/总结
    真正理解javascript的五道题目.
  • 原文地址:https://www.cnblogs.com/jixiaowu/p/3890413.html
Copyright © 2020-2023  润新知