public static int x = 0;
public static int y = 0;public static void ss() {
x = y;
y++;
for(h[x]=0;h[x]<sz[x].length;h[x]++) {
if(x == 2) { // 等于2 只是举个例子,即有3个for循环;
System.out.println("==========:"+g);
g++;
}else {
ss(); // 递归
}
}
}现在的问题是,递归完后,只程序只执行了最后一个for ,假设每个数组的长度定为3,那么,输出时,应该是 3*3*3 ,得27条输出语句,但现在只有3条, 也就是,程序只走了最后一个循环,前面的两个循环没执行,请各位指教,是逻辑出问题了吗?
public static int y = 0;public static void ss() {
x = y;
y++;
for(h[x]=0;h[x]<sz[x].length;h[x]++) {
if(x == 2) { // 等于2 只是举个例子,即有3个for循环;
System.out.println("==========:"+g);
g++;
}else {
ss(); // 递归
}
}
}现在的问题是,递归完后,只程序只执行了最后一个for ,假设每个数组的长度定为3,那么,输出时,应该是 3*3*3 ,得27条输出语句,但现在只有3条, 也就是,程序只走了最后一个循环,前面的两个循环没执行,请各位指教,是逻辑出问题了吗?
可能是这样,你最内层的循环改变了全局变量,使内存循环退出后外层循环的条件不满足。所以外层循环只执行一次。共1*1*3=3次。
第二次x=1 执行h[1]=0,调用ss跳出循环
第三次x=2 执行h[2]=0,调用System.out.println("==========:"+g); g++;
相当于只有x=2才有输出 也就是,程序只走了最后一个循环
for 0
for 1
for 2那么,此时(x=2)写输出的话,是不是在3个嵌套的循环里,即输出的的条数应该为3个循环的乘积,即 3*3*3
,逻辑上是这么想的,不知道这个逻辑是否有问题,现在就是: 程序只走了最后一个循环, 这是因为 x=2 导致的吗, 难道嵌套循环没产生?
for 数组2
for 数组3
// 写输出语句,最终,应该得到,3*3*3条输出语句!
比如for 0{
调用 ss
}
调用ss时,会跳出当前循环,重新开始了一个循环
for 1{
调用 ss
}
x = y;
y++;
for( h[x]=0;h[x]<(sz[x].length);h[x]++) {
System.out.println("---------------"+x);
if(x == 2) {
System.out.println("==========:"+x);
}else {
ss(); // 递归
}
}
} 执行上面得代码打印结果为
---------------0
---------------1
---------------2
==========:2
---------------2
==========:2
---------------2
==========:2
根据执行结果看,所谓的嵌套循环并没有产生