问题:
假设你正在爬楼梯,楼梯有n阶
每一次,你可以爬1阶,或者2阶,
有多少种方法,爬到楼顶!
分析:
求方法数这个函数设为f(n)
当n=1时,也就是只有一阶时,
f(1)= 1;
当n=2,也就是楼梯有两阶时,
f(2)= 2;
第一种:1阶+1阶
第二种:2阶 直接到顶。
当n=3时,就有两种情况:
第一种情况,
第一步,爬1阶,剩下还有2阶
那这种情况下,方法数,就是爬2阶的方法数,也就是f(2)
第二种情况,
第一步,直接爬2阶,剩下还有1阶
这种情况下,方法数,就是f(1)
把这两种情况合计起来:
f(3) = f(2) + f(1);
同样道理,当n=4是,也是有两种情况
1.第一步爬1阶,方法数是f(3)
2.第一步爬2阶,方法数是f(2)
所以f(4) = f(3) + f(2)
所以我们可以总结出递推公示,当n>=3时,f(n) = f(n-1) + f(n-2)
演示代码如下:
#include <bits/stdc++.h>
using namespace std;
int f[30];
int main(){
f[1]=1;
f[2]=2;
int n;
cin >> n;//n>=3
for(int i=3;i<=n;++i){
f[i] = f[i-2] + f[i-1];
}
cout << f[n];
return 0;
}