面试题:
台阶问题,一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,使用地递归算法,计算共有多少种不同的走法
/**
* TX面试题
* <p>
* create by SJP
* 2018/1/1
*/
public class Stage {
private static final int floor = 50; // 50层阶梯
public static void main(String[] args) {
int count = 0; // 计数方法
int one = 0; // 爬一层的步数
count = stepByOne(one, count); // 开始递归
System.out.println("总的方法种数:" + count);
}
public static int stepByOne(int one, int count) {
if (one > floor) { // 当one是50的时候仍需在递归一次
return count;
} else {
int fnum = 0; // 初始当前计数总楼层
fnum = one;// 根据走一步的层数,计算当前总楼层,
fnum = stepByTwo(fnum); // 开始递归走2层的步数
if (fnum == floor) { // 如果结果数字等于50层则递归结果符合
count++; // 方法总数++
System.out.println("爬一层的步数:" + one + " 爬2层的步数" + (floor - one) / 2);
}
one++;
return stepByOne(one, count);
}
}
public static int stepByTwo(int fnum) { // 爬一步数字 当前楼层
if (fnum >= floor) {
return fnum;
} else {
fnum = fnum + 2; //每次加上一个2 ,即爬两层
return stepByTwo(fnum);
}
}
}
2018年第一个算法问题,感觉2个递归方法不是最完美的方法,希望在以后的学习当中,再次改进,如果大家有更好的方法,我们一起交流!
留下我的个人兴趣网页(瞎搞点的玩意^o^),多多关照!
www.foryou.ink