Мне нужно понять, как отказаться от рекурсивной функции. Я знаю, как это делается для основных функций, таких как факториал или Фибоначчи. Я не понимаю это для этой проблемы.
Я попытался устранить другие условия во втором рекурсивном вызове, но он генерирует все возможные наборы скобок, включая и несбалансированные.
public final class Example {
public static void parentheses(int left, int right, String str) {
if (left == 0 && right == 0) {
System.out.print(str);
System.out.print(", ");
}
if (left > 0) {
str += "(";
parentheses(left - 1, right, str);
}
if (right > 0 && right > left) {
str += ")";
parentheses(left, right - 1, str);
}
}
public static void main(String[] args) {
parentheses(3, 3, "");
}
}
Я хочу, чтобы результатом были все возможные наборы сбалансированных скобок. Однако после каждого рекурсивного вызова я получаю 1 дополнительную левую скобку. Ожидаемый результат:
((())), (() ()), (()) (), () (()), () () (),
Вывод, который я получаю:
((())), ((() ()), ((() () (), (() ()), (() (() (),