Java 使用递归打印大小为n的所有二进制数

Java 使用递归打印大小为n的所有二进制数,java,recursion,binary,Java,Recursion,Binary,我正在尝试打印所有大小为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.j

我正在尝试打印所有大小为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

请帮我找出错误。谢谢

一个问题是您没有给出任何递归终止条件。 所以函数无限递归。没有停止呼叫的条件

这就是为函数调用分配的堆栈空间不足的原因,您会得到StackOverflowerError

请参阅此处的更多信息:


它必须使用递归吗?你在谷歌上搜索过StackOverflowerError?
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);

}

}