形如1 1 2 3 5 8…的数列我们把它称之为斐波那契数列,他的基本规律是本项等于前两项的和。
斐波那契数列的基本代码思路为:
#include<iostream>
using namespace std;
int main()
{
int f1=1,f2=1,f3; //定义三个变量
int n; //输入想要求的斐波那契数列第n项
cin>>n;
for(int i=3;i<=n;i++)
{
f3=f1+f2; //本项等于前两项之和
f1=f2;
f2=f3; //通过赋值运算求出下一项的前两项
}
cout<<f3<<endl;
return 0;
}
斐波那契数列在解决实际问题中也有广泛的应用
例如:
上楼梯问题:楼梯有n个台阶,上楼可以一步上一阶或者一步上两阶,问一共有多少种上楼方法?
让我们假设n=5时一共有八种方法
5=1+1+1+1+1
5=2+1+1+1
5=1+2+1+1
5=1+1+2+1
5=1+1+1+2
5=2+2+1
5=2+1+2
5=1+2+2
可以看出加粗的部分是第一次走了一个台阶
而未加粗的部分是一次走了两个台阶
我们就可以把n个台阶的走法分为两类
我们设n个台阶走法总数为f(n)
- 第一类:第一步走一个台阶,剩下n-1阶要走f(n-1)。
- 第二类:第一步走两个台阶,剩下n-2阶要走f(n-2)。
所以我们就得到了递推式f(n)=f(n-1)+f(n-2)
即为本项为前两项的和,符合斐波那契数列模型。
考虑边界情况:
f(1)=1:当只剩下一个台阶时只能跨一步即只有一种方法。
f(2)=2:当只剩下两个台阶时可以跨两步也可以跨两次一步。
找出规律得到一下数列:
1 2 3 5 8 13…
#include<iostream>
using namespace std;
int fib(int n) //创建递归函数
{
if(n==1) return 1;
if(n==2) return 2; //找到递归边界值
return(fib(n-1)+fib(n-2)); //递归式
}
int main()
{
int x;
cin>>x;
cout<<fib(x)<<endl;
return 0;
}