有n步台阶,一次只能上1步或2步,共有多少种走法?

第一种(用递归)

public static int step(int n){
   if(n < 1){
      throw new IllegalArgumentException("n不能小于1。");
   }
   if(n == 1 || n == 2){
      return n;
   }
   return step(n - 1) + step(n - 2);
}

推导过程(有助于理解)

image
image
image
image

循环迭代(动态规划DP)效率更高

> 动态规划

动态规划包含三个重要的概念:最优子结构,边界,状态转移公式。
image

上代码

public static int step(int n){
   if(n < 1){
      throw new IllegalArgumentException("n不能小于1。");
   }
   if(n == 1 || n == 2){
      return n;
   }
   int a = 1;
   int b = 2;
   int tem = 0;
   for (int i = 3; i <= n; i ++){
      tem = a + b;
      a = b;
      b = tem;
   }
   return tem;
}

注:
参考博客:https://www.sohu.com/a/149075950_684445

posted @ 2021-03-15 15:36  卡卡罗特琪琪  阅读(1092)  评论(0)    收藏  举报