标题: 第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数
步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。
解析:
先简化题目将数字变小来推理,求一个人可以一次迈一个台阶,也可以迈两个台阶,问此人走三步,一共有多少种走法。
static int count = 0;
static int[] arr = new int[3];
public static void main(String[] args) {
walk(0,0);
System.out.println(count);
}
/**
* @param step:行走过程中跨过的总台阶数量
* @param walkCount:走路的步数
*/
public static void walk(int step,int walkCount)
{
if(walkCount>=3) //正好最后一个台阶,并且是右脚
{
count++;
System.out.println(arr[0]+" "+arr[1]+" "+arr[2]+" ");
return;
}
//此处递归出所有情况
arr[walkCount] = 1;
walk(step+1,walkCount+1);
arr[walkCount] = 2;
walk(step+2,walkCount+1);
}
由上述程序可知,两次walk的递归调用,可以将该人所有的上台阶方案全部列举出来。
所以:该题目代码如下:
利用两次递归调用,列举所有的走路方案,在方案中判断是否正好39级台阶以及是否偶数步。
static int count = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
walk(0,0);
System.out.println(count);
}
/**
* @param step:行走过程中跨国的总台阶数量
* @param walkCount:走路的步数
*/
public static void walk(int step,int walkCount)
{
if(step > 39) return;
if(step == 39 && walkCount % 2 == 0) //正好最后一个台阶,并且是右脚
{
count++;
return;
}
//此处递归出所有情况
walk(step+1,walkCount+1);
walk(step+2,walkCount+1);
}