- 题目
题目: 第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。
- 方法一
递推解决,模拟上楼
public class ThreeNineSteps {
static int n = 0;
public static void main(String[] args) {
f(39, 0);
System.out.println(n);
}
static void f(int step,int counter) {
if(step==0) {
if(counter%2==0)
n++;
return ;
}
f(step-1, counter + 1);
if(step>=2)
f(step-2, counter + 1);
}
}
- 方法二
巧妙的分解问题,也是递推解决问题。对于N步阶梯偶数步上去,只要求出N-1和N-2步阶梯奇数步上去的和即可。
public class ThreeNineSteps {
public static void main(String[] args) {
System.out.println(even(39));
}
//N个台阶在奇数步内走完
static int odd(int n) {
if(n==1) return 1;
else if(n==2) return 1;
else if(n==3) return 1;
return even(n-1) + even(n-2);
}
//N个台阶在偶数步内走完
static int even(int n) {
if(n==1) return 0;
else if(n==2) return 1;
else if(n==3) return 2;
return odd(n-1) + odd(n-2);
}
}
后者速度更快。。。