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