C# 递归编程:跳转到代码中的上一步

C# recursive programming: jump onto previous step in code

我接到了编写数独程序的任务,该程序解决了数独维基百科示例。 解决数独难题的方法必须是递归方法。 它首先检查数独板是否有效(数独规则:同一行、同一列和同一框中没有两次出现的数字),然后获取它可以写入的第一个空字段,并将第一个值(数字 1)写入字段。之后,该方法再次调用自身(递归)。

我的方法是这样的:

private bool SolveSudoku(int[,] board)
    {
        // if board not valid, return false
        if (!CheckBoardValid(board))
        {
            return false;
        }

        // if board full, return true
        var nextField = GetFirstEmpty(board);
        if (nextField is null)
        {
            return true;
        }

        for (int value = 1; value < 10; value++)
        {
            board[nextField.Value.X, nextField.Value.Y] = value;
            var solved = SolveSudoku(board);
            // if solved, do nothing
            // if not solved, undo this step and try writing next number (value++) in field
        }
        return false;
    }

如果最后一步无效,我该如何撤消?

截取相关部分:

for (int value = 1; value < 10; value++)
{
    board[nextField.Value.X, nextField.Value.Y] = value;
    if(SolveSudoku(board)) return true;
    // ^^ Stop if solved,
    // iteration will increase value if not.
}
// reset and return false if no value for this field leads to a solution.
board[nextField.Value.X, nextField.Value.Y] = 0;
return false;