来源: 语法题
算法标签 循环结构,递推
题目描述
以下数列0 1 1 2 3 5 8 13 21 …被称为斐波纳契数列。
这个数列从第3项开始,每一项都等于前两项之和。
输入一个整数N,请你输出这个序列的前N项。
输入格式
一个整数N。
输出格式
在一行中输出斐波那契数列的前N项,数字之间用空格隔开。
数据范围
0<N<46
样例
输入样例:
5
输出样例:
0 1 1 2 3
思路
0 1 1 2 3 5 8 13 21 …被称为斐波纳契数列
且每一项都等于前两项之和
即我们可以得到表达式,f[i]=f[i-1]+f[i-2]
那么很显然,我们可以利用循环结构和该公式求得斐波那契数列。
且最小项肯定为f[i]=f[i-1]+f[i-2]
,则我们首项肯定为f[2]
.
代码如下
C++ 代码
#include<iostream>
#include<vector>//动态数组
using namespace std;
const int N=50;
int n,cnt;
vector<int>fib={0,1};//手动写入f[0],f[1]
int main()
{
cin>>n;
for(int i=2;i<=N;i++)//从第二项遍历到最大范围
{
if(i<=n)
fib.push_back(fib[i-1]+fib[i-2]);//当当前位子小于目标值时,得到f[i]等于前两项之和
if(cnt<n)
cout<<fib[cnt++]<<" ";//当f的计数器小于目标值时,输出0-n-1的斐波拉契数列,计数器从零开始跑,以求o(n)走完
}
return 0;
}