也说说有N阶楼梯每次可以选择下1阶、2阶、3阶一共有多少种下法的问题
2014-07-16 22:18
851 查看
问题:假设有50阶台阶,每次可以选择下3阶、2阶、或者1阶,问下到底一共可以有多少种下法,并用J***A代码实现
分析:很明显这是一个递归的问题
假设只有一阶台阶,那么只有一种走法,即下一阶
假设有两阶台阶,那么有两种走法:
a.一次下两个台阶
b.一次一个台阶下两次
假设有三阶台阶,那么有四种走法:
a.下一次三阶
b.下一次两阶,再下一次一阶
c.下一次一阶,再下一次两阶
d.下三次一阶
由上所述,易得
f(n) = f(n-3) + f(n-2) + f(n-1)
解答:
package javaapplication1;
/**
*
* @author meng
*/
public class DownStairs1 {
/**
* @param args
*/
public static void main(String[] args) {
int currentStep = 50;
System.out.println("totaly possibility is: " + totalPsblt(currentStep));
}
public static int totalPsblt(int n) {
switch (n) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 4;
default:
return totalPsblt(n - 1) + totalPsblt(n - 2) + totalPsblt(n - 3);
}
}
}
评析:上段J***A仅能实现,但是效率比较低
分析:很明显这是一个递归的问题
假设只有一阶台阶,那么只有一种走法,即下一阶
假设有两阶台阶,那么有两种走法:
a.一次下两个台阶
b.一次一个台阶下两次
假设有三阶台阶,那么有四种走法:
a.下一次三阶
b.下一次两阶,再下一次一阶
c.下一次一阶,再下一次两阶
d.下三次一阶
由上所述,易得
f(n) = f(n-3) + f(n-2) + f(n-1)
解答:
package javaapplication1;
/**
*
* @author meng
*/
public class DownStairs1 {
/**
* @param args
*/
public static void main(String[] args) {
int currentStep = 50;
System.out.println("totaly possibility is: " + totalPsblt(currentStep));
}
public static int totalPsblt(int n) {
switch (n) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 4;
default:
return totalPsblt(n - 1) + totalPsblt(n - 2) + totalPsblt(n - 3);
}
}
}
评析:上段J***A仅能实现,但是效率比较低
相关文章推荐
- 楼梯有n阶台阶,上楼可以一步上1阶,2阶,3阶,编程序计算共有多少种不同的走法?
- 一个人走一个n阶的楼梯,他一步可以走1阶,2阶,3阶,这三种情况,问走完这n阶的楼梯共有多少种不同的走法?
- 楼梯有n阶台阶,上楼可以一步上1阶,2阶,3阶,编程序计算共有多少种不同的走法?
- 问题五十七: 楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编程序计算共有多少种不同的走法?
- 爬楼梯问题,一共有n阶台阶,每次你可以走1或者2个台阶,到达顶端一共有多少种不同的走法?
- 【逻辑题】每次1阶或者2阶,共7阶楼梯,多少种走法
- 一共有20级楼梯,每次可以上1级或2级,登上第20级一共有多少种上法
- 爱因斯坦 上楼梯问题 若每步跨2阶,剩1阶 两种方法
- 问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料?
- LUA面试题:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法。
- 青蛙跳台阶,可以跳1阶,也可以跳2阶,N阶台阶有多少种跳的方式,算法题
- Climbing Stairs 爬楼梯问题,每次可以走1或2步,爬上n层楼梯总方法 (变相fibonacci)
- n个台阶,每次都可以走一步,走两步,走三步,走到顶部一共有多少种可能
- 楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上两阶,编写算法计算共有多少种不同的上楼梯的方法。
- 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?请编程实现。
- 排列的个数 计算3个A,2个B可以组成多少种排列的问题(如:AAABB, AABBA)是《组合数学》的研究领域 。
- 10个台阶,每次最多上2阶,有多少种上法?
- 上20阶楼梯,可以一次迈1,2,3步,请问有多少种上法?
- 寒假的时候,小明同学要去拜访很多朋友,恰巧他所有朋友的家都处在坐标平面的X轴上。小明可以任意选择一个朋友的家开始访问,但是每次访问后他都必须回到出发点,然后才能去访问下一个朋友。
- 新问题:一个进程最多可以接收多少个socket连接? - C/C++ - ChinaUnix.net -