【题目描述】
求斐波那契数列的前n项。斐波那契数列公式如下
f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2)
数列:1 1 2 3 5 8 13 21 ......
【题目解析】
方法一:循环迭代法(数值替换)
每次循环输出 f(n)=f(n-1)+f(n-2) 后,用 f(n-1) 和 f(n) 的值替换 f(n-2) 和 f(n-1) ,从而使数列后移。
#include<iostream>
using namespace std;
int main()
{
int n,f1=0,f2=1,fn;
//从第2项(0+1)开始输出,设定初始值时为0和1
cin>>n;
cout<<'1'<<' '; //将第一项补充至开头
for(int i=0;i<n-1;i++) //从第二项开始,为 n-1
{
fn=f1+f2;
cout<<fn<<' ';
f1=f2; f2=fn; //数值替换实现迭代
}
return 0;
}
注意:f1,f2初始化要给0和1(如果循环从第3项开始输出,则初始化为1和1,但循环前要判断需要输出第1项还是第1项和第2项)
方法不够直观,但代码好写。
方法二:数组循环(数值保留,不替换)
建立含n项的数组,让每项为其前两项之和(公式法)
#include<iostream>
using namespace std;
int main()
{
int n,*a; //通过指针与new动态建立存储空间,产生不定长度的数组
cin>>n;
a=new int[n+1]; //将第0项也存入数组,总共有n+1个数
a[0]=0;
a[1]=1;
cout<<a[1]<<' ';
for(int i=2;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<a[i]<<' ';
}
return 0;
}
方法直观,就是公式,但要注意不定长度数组的建立。
建立不定长度数组链接:C++自学知识点——不定长度的数组建立_m0_60533232的博客-CSDN博客