来源: 语法题

算法标签 循环结构,递推

题目描述

以下数列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;
}