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条, 也就是,程序只走了最后一个循环,前面的两个循环没执行,请各位指教,是逻辑出问题了吗?

解决方案 »

  1.   

    数组h是全局变量,虽然你用了局部变量x,y来作为数组索引,但其实操作的还是全局变量h。
    可能是这样,你最内层的循环改变了全局变量,使内存循环退出后外层循环的条件不满足。所以外层循环只执行一次。共1*1*3=3次。
      

  2.   

    To 3L:恩,有可能是 '最内层的那个嵌套循环改变了外层的条件' , 但想不出是怎么改变的,或许是其他逻辑问题?
      

  3.   

    第一次x=0 执行h[0]=0,调用ss跳出循环
    第二次x=1 执行h[1]=0,调用ss跳出循环
    第三次x=2 执行h[2]=0,调用System.out.println("==========:"+g); g++;
    相当于只有x=2才有输出 也就是,程序只走了最后一个循环
      

  4.   

    To 6L:写x=2 ,是为了终止递归,即x=2 时,应该产生的是 3 个 for 循环的嵌套:
    for 0
       for 1
         for 2那么,此时(x=2)写输出的话,是不是在3个嵌套的循环里,即输出的的条数应该为3个循环的乘积,即 3*3*3
    ,逻辑上是这么想的,不知道这个逻辑是否有问题,现在就是: 程序只走了最后一个循环, 这是因为 x=2 导致的吗, 难道嵌套循环没产生?
      

  5.   

    算了,这个问题还是这么问吧:想产生一个 for 嵌套循环,for 循环的个数是不定的(就是说,到底有几个for循环),比如说,有3个, 然后呢,在最后一个循环里写条输出语句, 那么这个输出语句的个数,应该是这几个循环的长度的乘积吧,比如,每次循环的是个数组(每次的数组不同),每个数组的长度是3,那么,得到的输出语句,是不是应该是 3*3*3, 请问,如何实现,? for 循环的嵌套,是不是用递归来产生 ?? 麻烦列出代码!!问题的大概其的意思:for 数组1
        for 数组2
           for 数组3 
                // 写输出语句,最终,应该得到,3*3*3条输出语句!
      

  6.   

    我觉得你的理解有问题,
    比如for 0{
      调用 ss
    }
    调用ss时,会跳出当前循环,重新开始了一个循环
    for 1{
      调用 ss
    }
      

  7.   

    程序从上往下读,递归调用函数几次就执行几次函数体,只有在当条件满足等于2时才会执行if判断里的代码,也就是说,你程序是执行了3遍,可最终满足if条件的就只有一遍
      

  8.   

    输出的条数应该是sz[x].length吧
      

  9.   

        public static void 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
    根据执行结果看,所谓的嵌套循环并没有产生