在数学上,是如下数列:1,1,2,3,5,8,13,21,34,55....
表达式为F(n)= 1 n=1,2
= F(n-1)+F(n-2) n>=3 //前两个数之和
方法一 循环结构
自定义函数f,返回第n项的值,当n>=3时,循环计算结果
首先定义两个加数f1和f2,初始化为第一个(1)和第二个数(1),用变量val记录相邻项的和,初始值为0。当循环变量i从3开始知道n时,每次执行val=f1+f2,然后用变量f1和f2分别记录下一项的值,即f1记录f2的值,f2记录val的值。
#include<iostream>
using namespace std;
int main()
{
int f1,f2,val,n;
f1=f2=1;
val=0;
cin>>n;
if(n<=0)
{
cout<<"wrong number";
}
else if((n==1)||(n==2))
{
cout<<"F(n)="<<f1;
}
else
{
for(int i=3;i<=n;i++)
{
val=f1+f2;
f1=f2;
f2=val;
}
cout<<"F(n)="<<val;
}
return 0;
}
方法二 递归
#include<iostream>
using namespace std;
int f(int n);
int main()
{
int result,n;
cin>>n;
result=f(n);
cout<<result;
return 0;
}
int f(int n)
{
if(n<0)
return 0;
else if((n==1)||(n==2))
return 1;
else
return f(n-1)+f(n-2);
}
递归方法速度比较慢
循环方法速度较快
因此,能用循环直接解决的问题,就用循环结构来解决。