楼梯有m层,可以迈1步或两步,有几种方法?

2014-11-24 09:46:42 · 作者: · 浏览: 0

通过递归的方式可以比较容易的得到结果:下面是程序代码

[java]
public class StepDemo {
private static int sum = 2;//总的台阶数

public static void main(String[] args) {
step(sum,"");
}

private static void step(int subsum,String result){
if(subsum<=0){
System.out.println(result);
return;
}
if(subsum==1){
step(subsum-1,result+1);
}
if(subsum>1){//有两种可以选
int j=1;
for(;j<=2;j++){
step(subsum-j,result+j);
}
}
}


}

public class StepDemo {
private static int sum = 2;//总的台阶数

public static void main(String[] args) {
step(sum,"");
}

private static void step(int subsum,String result){
if(subsum<=0){
System.out.println(result);
return;
}
if(subsum==1){
step(subsum-1,result+1);
}
if(subsum>1){//有两种可以选
int j=1;
for(;j<=2;j++){
step(subsum-j,result+j);
}
}
}


}


不是很复杂,但是有一个容易出现的问题:如果我们把程序写成如下形式:

[java]
public class StepDemo {
private static int sum = 2;//总的台阶数

public static void main(String[] args) {
step(sum,"");
}

private static void step(int subsum,String result){
if(subsum<=0){
System.out.println(result);
return;
}
if(subsum==1){
result = result+1;
step(subsum-1,result);

}
if(subsum>1){//有两种可以选
int j=1;
for(;j<=2;j++){
result = result+j;
step(subsum-j,result);

}
}
}


}

public class StepDemo {
private static int sum = 2;//总的台阶数

public static void main(String[] args) {
step(sum,"");
}

private static void step(int subsum,String result){
if(subsum<=0){
System.out.println(result);
return;
}
if(subsum==1){
result = result+1;
step(subsum-1,result);
}
if(subsum>1){//有两种可以选
int j=1;
for(;j<=2;j++){
result = result+j;
step(subsum-j,result);
}
}
}


}上面的程序中我们希望找到在m=2时的所有的方案。程序结果为:

[html]
11
12

11
121+2=3,这样就走了3层,而m=2,这必然是不对的。这是什么原因呢:


我们看当subsum=2时,满足subsum>2,进入for循环

[java]
j=1--->第一次调用的step中的result=“1”--->step(1,"1")||||递归调用,满足subsum=1,第二次调用的step中的result=“11”|||递归调用--->输出11

j=1--->第一次调用的step中的result=“1”--->step(1,"1")||||递归调用,满足subsum=1,第二次调用的step中的result=“11”|||递归调用--->输出11[java] view plaincopyprint j=2--->第一次调用的step中的result已经是"1"了,现在要执行

result = result+j;
得到的result就是“12”了
而正确代码中没有直接改变本层递归中result的值