ich eine Methode für meine Hausaufgaben geschrieben haben alle der Permutationen einer Reihe von ganzen Zahlen mit Rekursion zu berechnen. (Ich versuche, Backtracking-Algorithmus zu implementieren). aber es verursacht StackOverflowException
für die Berechnung der Prämutationen von mehr als 7 Zahlen. Ich weiß nicht, wie ich dieses Problem lösen soll. implementiert es noch Backtracking, wenn ich Itration verwende?Lösung Stackoverflow in einem rekursiven Verfahren
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()
ist Methode, die nicht überprüft Duplikat zu haben, in den Kindern eines Knotens des Baumes, der nicht doppelt zu haben, von der Wurzel zu jedem verlassen
Ausnahme:
Exception in thread "main" java.lang.StackOverflowError
at java.util.ArrayList.get(Unknown Source) ....
Sie müssen die Rekursion für Ihre Lösung verwenden? – Bernard
Der kritische Teil der Daten befindet sich weiter unten im Stack-Trace. Bearbeiten Sie Ihre Post und fügen Sie den gesamten Stack-Trace ein –
@Bernard: Nein, es ist nicht notwendig, aber da ich Backtracking implementieren wollte, habe ich es mit der Rekursion gemacht. –