创建所有组合 Java

Create all Combinations Java

我想创建具有两个状态(1 和 0)的所有组合。 如果我用两个 for 循环来做这件事,这就有效。但是当我使用自调用函数时它不会。请问有人能告诉我为什么吗?

For 循环:

public class Counter {
     public Counter() {
         loop(iter);
         for (int i=0; i < 2; i++) {
              for (int i2=0; i2 < 2; i2++) {
                   System.out.println(Integer.toString(i)+Integer.toString(i2));
              }
         }
     }
     public static void main(String args[]){
         new Counter();
     }
}

自调用函数:

class Stringhelper {
    public Stringhelper() {
    }
    public String getstring(String string,int beginning,int ending) {
         if (string.length() != 0) {
         String newstring="";
         for (int iter=Math.abs(beginning); iter < ending && iter < string.length(); iter=iter+1) {
              newstring=newstring+Character.toString(string.charAt(iter));
         }
         return newstring;
         }
         else {
         return "";
         }
    }
}

public class Counter {
     public String abil="";
     public int iter=1;
     public Stringhelper shelper=new Stringhelper();
     public void loop(int iter) {
         for (int i=0; i < 2; i++) {
              abil=abil+Integer.toString(i);
              if (iter==0) {
                  System.out.println(abil);
                  abil=shelper.getstring(abil,0,abil.length()-1);
              }
              else {
                  loop(iter-1);
              }
         }
     }
     public Counter() {
         loop(iter);

     }
     public static void main(String args[]){
         new Counter();
     }
}

并且使用自调用函数输出是 00,01,010,011 而不是 00,01,10,11

在此处解释您的代码(暂时忽略能力):

public void loop(int iter) {
         for (int i=0; i < 2; i++) {
              abil=abil+Integer.toString(i);
              if (iter==0) {
                  System.out.println(abil);
                  abil=shelper.getstring(abil,0,abil.length()-1);
              }
              else {
                  loop(iter-1);
              }
         }
     }

当 iter 为 0 时将打印它

在下一次迭代中,当它不等于0时,创建另一个循环,添加到堆栈中,再次从0开始,并打印abil的新堆栈值。

当您创建一个新堆栈时,它会重新创建临时存储中的所有变量,直到代码退出。在这种情况下,它会不断创建堆栈并且永远不会退出。要退出堆栈,请使用 return.

总之,您需要详细了解堆栈和递归的工作原理才能解决您的问题。

 public void loop(int iter) {
     for (int i=0; i < 2; i++) {
          if (i==1) {
              abil=shelper.getstring(abil,0,iter);
          }
          abil=abil+Integer.toString(i);
          if (iter==4) {
              System.out.println(abil);
          }
          else {
              loop(iter+1);
          }
     }
 }

成功了