Я написал метод для своей домашней работы, чтобы вычислить все перестановки массива целых чисел с рекурсией.(Я пытаюсь реализовать алгоритм возврата).но это вызывает StackOverflowException
для вычисления предпосылок из более чем 7 чисел.Я не знаю, как решить эту проблему.все еще реализует возврат, если я использую itration?
code:
solve(0, arr, currentS);
//****************
private static void solve(int i, ArrayList<Integer> arr, int[] currentS) {
if (i == arr.size()) {
for (int j : currentS) {
System.out.print(j + ",");
}
System.out.println();
currentS[i-1] = 0;
solve(i - 2, arr, currentS);
} else {
int x = nextValue(i, currentS, arr);
if (x != -1&&travers.isCompatible(arr, currentS.clone())) {
currentS[i] = x;
solve(i + 1, arr, currentS);
}
else if((i != 0))
{
currentS[i] = 0;
solve(i - 1, arr, currentS);
}
}
return;
}
nextValue()
- это метод, который проверяет, чтобы не иметь дубликатов в дочерних узлах дерева, илииметь дубликаты от корня до каждого отпуска
исключение:
Exception in thread "main" java.lang.StackOverflowError
at java.util.ArrayList.get(Unknown Source) ....