我想创建具有两个状态(1和0)的所有组合。 如果我用两个for循环这样做,这是有效的。但是,当我使用自我调用函数时,它不会。有人能告诉我原因吗?
For-Loops:
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
答案 0 :(得分:1)
在这里解释你的代码(暂时忽略abil):
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。
总之,您需要了解有关堆栈和递归如何工作的更多信息,以便解决您的问题。
答案 1 :(得分:0)
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);
}
}
}
这就是诀窍