我正在尝试打印所有大小为n的二进制数,例如,如果大小为3,我想以二进制形式打印从0到(2 ^ 3)-1的所有数字,如果我的代码实现,则打印下面的000并给我这个错误
"Exception in thread "main" java.lang.StackOverflowError
at java.lang.String.getChars(String.java:854)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:391)
at java.lang.StringBuilder.append(StringBuilder.java:119)
at java.lang.StringBuilder.<init>(StringBuilder.java:93)
at NBinary.tobinary(NBinary.java:11)
at NBinary.tobinary(NBinary.java:12)".
String temp = str+x; is line 11
tobinary(temp, size); is line 12
下面是我的代码
public class NBinary {
static int arr[] = {0,1};
static void tobinary(String str,int size){
if(str.length() == size){
System.out.println(str);
}
for(int x : arr){
String temp = str+x;
tobinary(temp, size);
}
}
public static void main(String[]args){
tobinary("", 3);
}
}
请帮我找错。感谢
答案 0 :(得分:1)
一个问题是您没有提供任何递归终止条件。 所以函数无限递归。没有任何条件可以停止呼叫。
这就是为函数调用分配的堆栈空间不足而你得到 StackOverflowError 的原因。
在此处查看更多信息:
http://docs.oracle.com/javase/7/docs/api/java/lang/StackOverflowError.html