小明刚刚看完电影《第39级台阶》。离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级。
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。
先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。
那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要用到间接递归,两个函数相互调用
解:
public class Main {
static int step = 39;
static int left(int n) {
// 因为最后一步是迈右脚,所以跳出的判断是放在左脚
if (n == step)// 当步数刚好为39时,算是一种走法
return 1;
if (n > step)// 当步数大于39时,不算,要退回去换一种走法
return 0;
return right(n + 1) + right(n + 2);// 左脚可以迈一步或两步
}
static int right(int n) {
return left(n + 1) + left(n + 2);// 右脚可以迈一步或两步
}
public static void main(String[] args) {
System.out.println(left(0));// 先迈左脚
}
}