一共有n个台阶,你一次可以走一个台阶,或者两个台阶。那么,走到台阶顶时,一共有多少种走法。
比如三个台阶,你可以 1,2。。。或者1,1,1 或者2,1。。一共三种走法。
一共n阶台阶,倒数第一步时,无视前面怎么走,有两种走法:
1.走一步
2.走两步
两种走法的走法种数相加就是n阶台阶的情况下的所有种数,即:
f(n)=f(n-1)+f(n-2)
此式子显然是斐波那契数列。
-----------------------------------------------------------------------------------------------------------------------------------------------------
编程方法:
1.非递归
private static int count(int ladder) {
if (ladder == 1 || ladder == 2) {
return ladder;
}
int n1 = 1;
int n2 = 2;
for (int i = 3; i <= ladder; i++) {
int tmp = n2;
n2 = n1 + n2;
n1 = tmp;
}
return n2;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------
2.递归解法
private static int calculateCount(int ladder, int maxJump) {
int jump = 0;
if (ladder == 0) {
return 1;
}
if (ladder >= maxJump) {
// 剩下的楼梯大于最大可跳跃数
for (int i = 1; i <= maxJump; i++) {
jump += calculateCount(ladder - i, maxJump);
}
} else {
// 剩下的楼梯不足最大可跳跃数
jump = calculateCount(ladder, ladder);
}
return jump;
}