[算法]楼梯台阶

楼梯台阶

问题描述

一个共有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));
    }
}

猜你喜欢

转载自www.cnblogs.com/Rowry/p/11913518.html
今日推荐