#java #recursion #binary #concatenation #stack-overflow
#java #рекурсия #двоичный #конкатенация #переполнение стека
Вопрос:
Эти два метода генерируют исключение переполнения стека, когда они используют друг друга. Первое — создать все двоичные строки с использованием рекурсии, а второе — проверить, сбалансировано ли оно. Вы знаете почему? Когда я запускаю их независимо, они выполняются нормально. str будет введен как пустая строка в начале, а n — требуемый размер строки.
public static void printEqualBinaries(String str, int n) {
if (str.length() == n amp;amp; 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);
}
Комментарии:
1. Не могли бы вы уточнить, что именно вы хотите, чтобы это делало? Спасибо.
Ответ №1:
Каждый вызов этого метода printEqualBinaries(str, n);
с входными параметрами (str.lenght() != n )
становится бесконечным циклом, поскольку условие (str.length() == n )
всегда принимает значение false;
Если вы добавите условия ‘stop’ как для k1, так и для k2, вы получите 4 двоичных строки в вашем случае и, например, для printEqualBinaries («», 13); 1848 результатов, подобных (вывод хэш-карты):
{1110001010110=0001110101001, 1101000100101=0010111011010, 1110001101001=0001110010110, 1001010101010=0110101010101, 1101000111000=0010111000111, 1010110011101=0101001100010, 1001010010110=0110101101001, и т.д. }
Конечно, при условии, что это то, что вы подразумеваете под сбалансированным.