题目:
有一楼梯共 M 级,刚开始时你在第一级,若每次只能跨上一步或两步,只上不下,要走上第M级,共有多少种走法?
分析:
其实找找规律也能得出结论:答案组是一个 类斐波那契数列,那么我们静下心来分析一下原理,也为后面学习动规打打基础:
倒推一下,假设再跨一次即抵达M,那么这一跨仅两种可能,一步两步 一步两步一步一步是爪牙… 这样我们包装这一跨,推到上一跨,也是只有两种可能,以此类推直到第一跨,可以发现每层非常类似,于是可以递归:
假设目标层为A,抵达A有两个起点B1(A的下一层),B2(A的下下层);将B1(C1,C2两起点),B2(C3,C4两起点)看作新目标层,可得递推公式:F(A) = F(B1) + F(B2)
显然 B1 - B2 = 1(邻层),所以:F(当前) = F(下层) + F(下下层)
F(X)为到达第X层的走法种数
实现:
int main() {int T; cin >> T; getchar();
int n, a[50]={0,1,2};
for(int i = 3; i <= 40; i++)
a[i] = a[i-1] + a[i-2];
while(T--) {
cin >> n;
cout << a[n-1] << endl; //到 M 层 需上 M-1 层
}
return 0;
}