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

简介: 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)二分矩阵方法(我自己还不怎么懂。。。)

目录
相关文章
|
7月前
|
Java C++
简单斐波那契
简单斐波那契
78 0
|
2月前
斐波那契数列
【10月更文挑战第19天】斐波那契数列。
36 3
|
3月前
|
Java
01_斐波那契数列
01_斐波那契数列
|
7月前
|
机器学习/深度学习 算法
|
7月前
斐波那契(快速矩阵幂)
斐波那契(快速矩阵幂)
36 0
Fibonacci数列的多种求法
Fibonacci数列的多种求法
80 0
(1188:1201:)斐波那契数列
(1188:1201:)斐波那契数列
153 0
|
机器学习/深度学习 开发工具
斐波那契数列的四种实现
在编程教程中提到斐波那契数列,通常都是用来讲解递归函数。当一个关于 N 的问题可以转换为关于 N - k 的同样问题时,它就可以尝试用递归的思路来解决。
斐波那契数列问题
斐波那契数列问题
102 0