你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
题目标题:第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级,站在台阶前,他突然又想到一个问题:
如果我每一步只能迈上一个或两个台阶,先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步,那么上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案,
要求提交的是一个整数
注意:不要提交解答过程,或其他的辅助说明文字
解题思路:
本题采用递归的方法求解,其思想是和斐波那契数列是一样的,只不过是斐波那契数列的逆向运用,
我们每一步都有两种走法,即走一个台阶或两个台阶,这样我们剩下的台阶数就减少1个或者减少2个,同时我们的步数增加1,
所以我们只需要判断剩下的台阶数是不是0,如果剩下的台阶数是0,则说明已经上到顶层,这个时候再判断步数是否为偶数步即可。如果符合要求,记录方法数的变量加1.
答案源码:
package 一三年省赛真题; public class Year2013_t4 { public static void main(String[] args) { f(39,0); System.out.println("方法有:" + answers); } static int answers = 0; //定义符合要求的方法个数 /** * @param n 剩余的台阶数 * @param step 已经走过的步数 * */ public static void f(int n,int step) { if (n<0) { return; } //如果剩余的台阶数为0说明已经走完,并且步数为偶数时,符合要求, if (n==0&&step%2==0) { answers++; //方法加1 return; } f(n-1, step+1); //下一步是一个台阶 f(n-2, step+1); //下一步是两个台阶 } }
输出样例: