Я рассматриваю этот блок кода часами и не могу понять, как это работает. Может кто-то, пожалуйста, дать подробное объяснение того, как рекурсия работает с этими функциями? Имейте в виду, что я очень новичок в программировании.Проблема с пониманием того, как рекурсия работает с этим решателем Sudoku
Часть, которая меня сбивает с толку, - как многократно разрешается решение()? Разве он не остановится после достижения головоломки [row] [col] = 0?
Это, кстати, рабочий код.
EDIT: Благодарим за ответ! Но я не вижу, где он возвращается.
void solve(int row, int col) throws Exception
{
if(row > 8)
{
throw new Exception("Solution found") ;
}
if(puzzle[row][col] != 0)
{
next(row, col);
}
else
{
for(int num = 1; num < 10; num++)
{
if(checkHorizontal(row,num) && checkVertical(col,num) && checkBox(row,col,num))
{
puzzle[row][col] = num ;
next(row, col) ;
}
}
puzzle[row][col] = 0 ;
}
}
public void next(int row, int col) throws Exception
{
if(col < 8)
{
solve(row, col + 1) ;
}
else
{
solve(row + 1, 0) ;
}
}