楼梯台阶
问题描述
一个共有10个台阶的楼梯,从下面走到上面,一次只能迈一个台阶或者两个台阶,并且不能后退,走完这个楼梯共有多少种方法?
算法思路
- 这种题目很明显的相似结构在重复,在招到递归出口
- 相似条件: 迈一步或者两步
- 递归出口: 到第10层
- 10个台阶的迈法由2个部分构成:
- 第一步迈1阶=> 剩余9个台阶的迈法
- 第二步迈2阶=> 剩余8个台阶的迈法
- 其实递归的分析有点类似数学的分类讨论
- 具体思路参考猴子爬山问题
代码示例
Python
def up_layer(n):
if n < 0:
return 0
if n == 0:
return 1
# n==1 n==2 也可以没有,有的话只是相当于提前判断了
# if n == 1:
# return 1
# if n == 2 :
# return 2
return up_layer(n - 1) + up_layer(n - 2)
print(up_layer(10))
Java
public class 楼梯台阶 {
static long up_layer(int n) {
long[] way = new long[n + 1];
// 初始化
way[1] = 1;
way[2] = 2;
for (int i = 3; i < way.length; i++)
way[i] = way[i - 1] + way[i - 2];
return way[n];
}
public static void main(String[] args) {
System.out.println(up_layer(10));
}
}