我一直在看這個代碼塊幾個小時了,我不知道它是如何工作的。有人可以請詳細解釋遞歸如何與這些函數一起工作嗎?請記住,我在編程方面非常新穎。麻煩理解遞歸如何與這個數獨求解器一起工作
讓我最困惑的部分是solve()如何反覆調用?難道它會在達到謎題後停止[row] [col] = 0?
這是工作代碼的方式。
編輯:謝謝你的回答!但我不知道它在哪裏回溯。
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) ;
}
}