Java编程题:一个人上楼梯,他可以一步上1个台阶,2个台阶或3个台阶,共有n个台阶,输出所有他上台阶的方

Java编程题:一个人上楼梯,他可以一步上1个台阶,2个台阶和3个台阶,共有n个台阶,输出所有他可能上台阶的方法
n不是一个定值,而是一个不定值,貌似要用一个递归算法,跟八皇后问题类似。
metshi的想法跟我一样,但是我想要的是具体的代码,我只知道大概的思路,不知道怎么写代码

一定要用递归的就这样写:

public class Test{
static final int s = 10; //自定义的台阶数
static int len = 0, sum = 0;
static int step[] = new int[s];

static void compute(final int stair) {
if(stair<0) return;
if(stair==0) {
printSum();
sum++;
return;
}
for(int i = 1; i <= 3; i++) {
step[len] = i;
len++;
compute(stair-i);
len--;
}
}

static void printSum() {
System.out.print("走法:");
for(int i = 0; i < len; i++)
System.out.print(step[i]+ " ");
System.out.println();
}

public static void main(String args[]){
compute(s);
System.out.println("共有" + sum + "种走法");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-14
用递归的方法 :

一级台阶有一种方法
两级台阶有三种方法
从三级开始 每增加一级台阶多3种方法

n个台阶比n-1个台阶 多3种方法
第2个回答  2010-10-14
public class Taijie{
public static int digui(int i){
if(i==1)
return 1;
if(i==2)
return 3;
if(i>3)
return digui(i-1)+3;
}
public static void main(String args[]){
int n = 10;//也可以读取输入的一个数
int total = digui(n);//上台阶总数
}
}
第3个回答  2010-10-14
主体代码:

public static int a(int t) {
if (t == 1)
return 1;
if (t == 2)
return 2;
if (t == 3)
return 3;
return a(t - 1) + a(t - 2)+ a(t - 3);
}
第4个回答  2010-10-14
public class TYes {
public static void main(String[] args) {
int n=10;
for(int x=0;x<n;x++){
for(int y=0;y<n;y++){
for(int z=0;z<n;z++){
if(x+2*y+3*z == 10){
System.out.println("x="+x+" y="+y+" z="+z);
}
}
}
}

}
}

...一步可以跨上1个台阶,2个台阶,或者3个台阶.共有12个台阶,从地面走上...
有三种情况:一 只需要走一步,这时已经走了(n-1)阶,走法与走n-1阶相同,有f(n-1)阶走法;二 只需要走两步,同上分析有f(n-2);三 只需要走三步,有f(n-3);所以走n阶台阶有f(n)=f(n-1)+f(n-2)+f(n-3)种走法;很明显,走1阶台阶有1种方法;走2...

某人上楼梯,一步可以上1,2,3个台阶,楼梯共1000个台阶,从地面到最上层共...
有三种情况:一 只需要走一步,这时已经走了(n-1)阶,走法与走n-1阶相同,有f(n-1)阶走法;二 只需要走两步,同上分析有f(n-2);三 只需要走三步,有f(n-3);所以走n阶台阶有f(n)=f(n-1)+f(n-2)+f(n-3)种走法;...

某人上楼梯,一步可以上1,2,3个台阶,楼梯共12个台阶,从地面到最上层共...
设上n级楼梯有an种走法,则an分三种情况:(1)第一次走1级,后面有an-1种走法;(2)第一次走2级,后面有an-2种走法;;(3)第一次走3级,后面有an-3种走法,所以,an=an-1+an-2+an-3,易得 a1=1,a2=2,a3=4,a4=1+2+4=7,a5=2+4+7=13,a6=4+7+13=24,a7=7+13+...

...共有n级台阶,规定每步可以迈1级台阶或2级台阶或3级台阶,设从地面到...
还可以第一步跨一级,第二步跨二级或第一步跨二级,第二步跨一级上楼,因此,共有4种不同的跨法,即a3=4.④当n=4时,分三种情况分别讨论:如果第一步跨一级台阶,那么还剩下三级台阶,由③可知有a3=4(种)跨法.如果第一步跨二级台阶,那么还剩下二级台阶,由②可知有a2=2(种)跨法....

楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编...
n - 1) + 2 * recursive(n - 2);}int iterative(int n){ int f1 = 1, f2 = 2, f; for (int i = 3; i <= n; ++i) { f = f2 + 2 * f1; f1 = f2; f2 = f; } return f; }

某人上楼梯一步可以跨上2个台阶或3个台阶,这个楼梯一共有10个台阶,从...
1,如果要恰好10个台阶,则共有7种 全部用2有1种,为22222 用两个2两个3有6种,2233,2323,2332,3322,3232,3223 2,如果不用恰好,则共有21种 全部用2有1种,22222 全部用3有1种,3333 用一个2三个3有4种,2333,3233,3323,3332 用两个2两个3有6种,2233,2323,2332,3322,...

一段楼梯,每次可登上1级或2级或3级,如果这段楼梯有N级台阶,那么从地面...
设N级台阶有f(n)种走法 f(1)=1,f(2)=2,f(3)=4 到第N阶,考虑最后一步,有1,2,3级三种登法 所以f(n)=f(n-1)+f(n-2)+f(n-3) 所以可以用递推公式推到第N项

1.一个人上楼,他有两种走法,走一阶或走两阶,问他上30阶楼梯有几种走法...
只有2层楼的话,可以走两步一阶,或者走一步2阶,共两种走法;本题就是求 f(30)。考虑一般的 x (x >= 3):假如你现在面对 x 层楼梯,你只有两种选择:1. 要么走一阶,变成还剩 x-1 层,这种情况下剩下的楼层共有 f(x-1) 种走法。2. 要么走两阶,变成 x-2 层,这种情况下剩下...

设一个共有n级的阶梯,可一步上一级,可一步上两级,也可一步上三级,用...
1级有1种,a1=1,2级有2种,a2=2,3级有4种,a3=4。4级开始,第一次迈1步,则剩下4-1级,走法有a3种,第一次迈2步,则剩下4-2级,走法有a2种,第一次迈3步,则剩下4-3级,走法有a1种,总走法a4=a1+a2+a3种;同理n级,走法an=a(n-1)+a(n-2)+a(n-3)种;...

C++ 爬楼梯问题 n级楼梯,每次可以爬1,2,3级,一共步数为m
\/\/如果正好走m步并且没有台阶剩余{ans.erase(ans.begin());\/\/删去多余的-连接号cout<<ans<<endl;\/\/输出答案cnt++;\/\/计数器+1return;}dfs(step_climb+1,ans+"-1",left-1);\/\/向三种情况递归搜索,ans添加当前这一步的级数dfs(step_climb+1,ans+"-2",left-2);dfs(step_climb+1,...

相似回答