24.蓝桥杯2013第四题-第39级台阶

/* https://www.cnblogs.com/zhezh/p/3773477.html

  • 看了博客后理解后做的
  • 算法思路:
  • 我们不应该纠结于先踩左脚还是右脚,我们从题目 "先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。"可以知道,不管踩左脚还是右脚,最后步数为偶数步就可以了,这样
  • 左脚即是右脚,右脚也是左脚,举例子把,比如只有10级台阶,每次踩一个阶梯,先踩左脚,那么要走10步,先踩右脚,那么也是要走10步,所以我们可以不用管左右脚,抓住步数就可以了,就算
  • 当成只用1个脚上去,也可以将再平分为2个脚,意思一样,只有步数为偶数那么就是左脚第一步,右脚最后一步了
  • 所以我们可以以这个步数是否为偶数为递归出口,那么如果39个阶梯,走到了第38个阶梯了,如果最后一步要走2级阶梯,那么阶梯为40,比最大阶梯数39大1,所以这是不符合的,
  • 所以这也是递归的一个出口,当阶梯数大于39
  • 最后一个出口则为,如果阶梯step为39,就是走完了,再判断是否为偶数,是偶数则count加1,也就是上法加1
  • 当条件都满足,那么我们就进行递归,一种递归为不管左脚右脚每次走一阶阶梯,,一种递归是不管左脚右脚每次走两阶阶梯,因为饿这是递归,
  • 在递归的上一层都有两个递归,一个是走一阶,一个是走两阶,
  • 逻辑不影响原数据,不用回溯
    递归从0台阶开始,f(0,0);
  • 题目_第39级台阶
    小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
    站在台阶前,他突然又想着一个问题:
    如果我每一步只能迈上1个或2个台阶。
    先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。
    那么,上完39级台阶,有多少种不同的上法呢?
    请你利用计算机的优势,帮助小明寻找答案。
    答案51167078
  • */
public class B4 {
    static int count = 0;
    public static void main(String[] args) {
        
        f(0,0);
        System.out.println(count);
    }
    private static void f(int startFloor, int stepNumber) {
        if(startFloor>39)
        {
            return;
        }
        if(startFloor==39)
        {
            if(stepNumber%2==0)
                count++;
        }
        f(startFloor+1,stepNumber+1);
        f(startFloor+2,stepNumber+1);
    }

}

你可能感兴趣的:(24.蓝桥杯2013第四题-第39级台阶)