爬楼梯--每次只能走一步或者两步,但是不能连续走两步

问题描述
爬楼梯–每次只能走一步或者两步,但是不能连续走两步
在这里插入图片描述
结合上面的图形
如果用户的楼层大于了2的话,
走的方式就分为了两种,第一次走一步或者第一次走两步,当用户走一步的话,下一次的走法就有:走一步或者走两步;当用户走了两步的话,下一次的走法就只能走一步

function climbStairs(n, status) {
    if (n < 0)
      return 0;
    if (n == 1)
      return 1;
    if (n == 2) { 		//当用户的阶梯只剩下2的时候,就需要判断最后一次走的状态(是一步还是两步)
      if (status == 1 || status == 0 ) {			//当状态是1或者是0的话,剩余的走法就还有两种(分别走两步和一次性走两步)
        return 2
      }
      if (status == 2) {			//当状态是2的话,剩余的走法就只有一种(走一步)
        return 1
      }
    }
    if (n > 2) {		//当阶梯大于2的时候
      if (status == 0) {		//状态为0的时候,就相当于是如图中的底层,分为两个方向相加f(n-1)和f(n-2),但是需要将本次走的状态传递过去(需要使用递归,自己调用自己)
        return climbStairs(n - 1, 1) + climbStairs(n - 2, 2)	
      }
      if (status == 1) {			//状态为1的时候,就相当于是如图中的底层的左边部分,又是分为两个方向相加f(n-1)和f(n-2),同样需要将本次次走的状态传递过去
        return climbStairs(n - 1, 1) + climbStairs(n - 2, 2);
      }
      if (status == 2) {		//状态为2的时候,就相当于是如图中的底层的右边部分,这里就只能有一种的走法了,所以递归过去的值就只剩下了f(n-1)
        return climbStairs(n - 1, 1);
      }
    }
  }
  console.log(climbStairs(7, 0))
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页