Java 尝试打印长度为n的所有平衡二进制字符串时无故引发堆栈溢出异常
这两个方法在相互使用时引发堆栈溢出异常。第一个是使用递归生成所有二进制字符串,第二个是检查它是否平衡。你知道为什么吗?当我独立运行它们时,它们运行正常。str将在开头作为空字符串输入,n是字符串的所需大小Java 尝试打印长度为n的所有平衡二进制字符串时无故引发堆栈溢出异常,java,recursion,binary,concatenation,stack-overflow,Java,Recursion,Binary,Concatenation,Stack Overflow,这两个方法在相互使用时引发堆栈溢出异常。第一个是使用递归生成所有二进制字符串,第二个是检查它是否平衡。你知道为什么吗?当我独立运行它们时,它们运行正常。str将在开头作为空字符串输入,n是字符串的所需大小 public static void printEqualBinaries(String str, int n) { if (str.length() == n && isBalanced(str,n)) { System.out.pri
public static void printEqualBinaries(String str, int n) {
if (str.length() == n && isBalanced(str,n)) {
System.out.println(str);
return;
}
String k1 = str + "1";
printEqualBinaries(k1, n);
String k2 = str + "0";
printEqualBinaries(k2, n);
}
public static boolean isBalanced(String str, int n) {
if (n % 2 == 0) {
int index = n / 2 - 1;
int sumLeft = 0;
for (int i = 0; i <= index; i++) {
sumLeft += Integer.parseInt(Character.toString(str.charAt(i)));
}
int sumRight = 0;
for (int i = index + 1; i < str.length(); i++) {
sumRight += Integer.parseInt(Character.toString(str.charAt(i)));
}
if (sumLeft == sumRight) {
return true;
} else {
return false;
}
} else {
int index = n / 2;
int sumLeft = 0;
for (int i = 0; i < index; i++) {
sumLeft += Integer.parseInt(Character.toString(str.charAt(i)));
}
int sumRight = 0;
for (int i = index + 1; i < str.length(); i++) {
sumRight += Integer.parseInt(Character.toString(str.charAt(i)));
}
if (sumLeft == sumRight) {
return true;
} else {
return false;
}
}
}
public static void main(String[] args) {
printEqualBinaries("", 3);
}
publicstaticvoid打印等式(stringstr,intn){
如果(str.length()==n&&isBalanced(str,n)){
系统输出打印项次(str);
回来
}
字符串k1=str+1;
印刷等式(k1,n);
字符串k2=str+0;
印刷均质性(k2,n);
}
公共静态布尔值isBalanced(字符串str,int n){
如果(n%2==0){
int指数=n/2-1;
int sumleet=0;
对于(int i=0;i此方法的每个调用printEqualBinaries(str,n);
和输入参数(str.lenght()!=n)
成为一个无限循环,因为条件(str.length()==n)
总是计算为false
如果为k1和k2添加“停止”条件,则在您的案例中以及例如printEqualBinaries(“,13”);1848个结果(HashMap输出):
{111000010110=000111010001、1101000100101=00101111010、111000101001=000110010110、1001010101010=01101010101、1101000111000=00101110001111、10101100111101=0101001100010、1001010010110=011010101001等}
当然,假设这就是你所说的平衡。你能澄清一下你到底想做什么吗?谢谢。