# Komplette Rekursion beenden?



## sicLotus (19. Nov 2011)

Hi,

ich habe eine rekursive Funktion mit folgender Signatur:

```
public static boolean solve(...) {
if(row > 8) 
 //KOMPLETTE Rekursion beenden

/*
LOGIK
*/

return false;
}
```

Die Funktion soll rekursiv und durch Backtracking ein Sudoku lösen, dabei geht die Funktion vom oben links nach unten rechts Zelle für Zelle durch.

Das heißt, wenn der Algorithmus irgendwann bei Zeile > 8 ankommt, soll die Rekursion abbrechen und true liefern.

Wenn ich return true; als Abbruchbedingung nutze, dann beendet er ja nur diesen Rekursionsaufruf (einen von vielen!) als true und durchs Backtracking werden die anderen dann trotzdem noch weiter arbeiten und verfälschen somit das Ergebnis.

Kann man irgendwie die gesamte Methode anhalten außer durch eine Exception?


----------



## faetzminator (19. Nov 2011)

Dann muss es [c]return solve(...)[/c] sein, dann beendet sich alles "von alleine"  Aber ohne mehr Code...


----------



## sicLotus (19. Nov 2011)

Okay, dann hier mal die komplette Rekursion:


```
public static boolean solve(int[][] sudoku, int row, int col) {
if (row > 9)
//Rekursion stoppen
if (sudoku[row,col] != 0)
next(sudoku, row, col);
else {
for (int i = 0; i <= 9, i++) {
if(checkRow(i) && checkCol(i) && checkBox(i)) { //wenn i in das Kästchen passen würde
sudoku[row,col] = i;
next(sudoku, row, col);
}
}
//falls er nix findet, backtracking
sudoku[row,col] = 0; 
}
return false; //hier sollte er wenn möglich gar nicht erst hinkommen, wenn er einmal die Abbruchbedingung oben gesehen hat
}

public static void next(int[][] sudoku, int row, int col) {
if(col > 8)
solve(sudoku, row+1, 0);
else 
solve(sudoku, row, col+1);
}
```


----------

