1.2 菲波那契数
1.2 .1 题目内容
菲波那契(Fibonacci)数(简称菲氏数)定义为:
(n>1且n∈整数)
如果写出菲氏数列,则应该是:
0 1 1 2 3 5 8 13 21 34 …
如果求其第 6 项,则应为 8。
求第 n 项菲氏数。
输入描述:输入数据含有不多于 50 个的正整数 n(0≤n≤46)。
输出描述:对于每个 n,计算其第 n 项菲氏数,每个结果应单独占一行。
输入样例
6 10
输出样例
8
55
1.2.2 提示
先把第 0 项到第 46 项的菲波那契数求出来,放在一个表(或数组)中,然后,直接查表即可,这样就不会超时。
(1)采用数组来做。
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char* argv[])
{
int a[47];
a[0]=0;
a[1]=1;
//先把前 46 项菲波那契数求出来放在表(或数组)中
for(int i=2;i<=46;i++)
{
a[i]=a[i-1]+a[i-2];
}
//查表(数组)
int n;
while(cin>>n)
{
cout<<a[n]<<endl;
}
return 0;
}
(2)采用向量来做。
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<unsigned int>v;
unsigned int n;
//先建表,把第 0~46 项的菲波那契数都算出来
v.push_back(0);
v.push_back(1);
for(int i=2;i<=46;i++)
{
v.push_back(v[i-1]+v[i-2]);
}
//直接输出第 n 项菲波那契数(从 0 项开始计算)
while(cin>>n)
{
cout<<v[n]<<endl;
}
return 0;
}