zoukankan      html  css  js  c++  java
  • 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)二分矩阵方法(我自己还不怎么懂。。。)
  • 相关阅读:
    Java Web系统经常使用的第三方接口
    Direct UI
    Python 分析Twitter用户喜爱的推文
    数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
    利用Excel批量高速发送电子邮件
    普林斯顿大学数学系的崛起
    Node.js学习
    映射 SQL 和 Java 类型
    Nutch配置
    OGNL
  • 原文地址:https://www.cnblogs.com/jixiaowu/p/3890413.html
Copyright © 2011-2022 走看看