题目:
有一楼梯共 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;
}
本文探讨了一道经典的楼梯爬法问题,通过分析得出其解法与斐波那契数列的紧密联系。文章详细解释了如何利用递归思想找到问题的解决之道,并通过一个简单的C++程序实现了算法,展示了计算到达特定楼层的不同路径数量的方法。
&spm=1001.2101.3001.5002&articleId=104711959&d=1&t=3&u=beb9b84f6fb54e20b727f1cbde6ccb63)
1678

被折叠的 条评论
为什么被折叠?



