/* 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);
}
}
网友评论