递归。返回 func() 和 if (func()) 返回 true 有什么区别?

Recursion. What's the difference between return func() and if (func()) return true?

本文关键字:func 返回 什么 区别 递归 if true      更新时间:2023-10-16

我正在写一个数独求解器,我已经有了工作的求解函数。

bool Sudoku::solve(int row, int col){
    while (board[row][col] != 0){
        col++;
        if (col > 8){
            col = 0;
            row ++;
        }
        if (row > 8){
            return true;
        }
    }
    for (int number = 1; number <= 9; number++){
        board[row][col] = number;
        if (check_row(row,number) && check_col(col,number) && check_box(row,col,number)){
            int next_row = row;
            int next_col = col;
            next_col++;
            if (next_col > 8){
                next_col = 0;
                next_row++;
            }
            if (next_row > 8)
                return true;

            // return solve(next_row, next_col);
            if (solve(next_row, next_col))
                return true;
        }
    }
    board[row][col] = 0;
    return false;
}

我真的不明白

if (solve(next_row, next_col))
    return true;

return solve(next_row, next_col);

但是对于第二行,我的函数不起作用

如果solve(next_row, next_col)为假,第一个函数将继续执行。第二个返回false

对于if (solve(next_row, next_col)) return true;,如果为false,则继续执行下一行。返回值只有在为true时才计算。这意味着如果第一个条件为假,而第二个条件不为假,board[row][col] = 0;将被执行。

在一般情况下,

if (solve()) return true;

返回解决();

第一个区别是,如果solve的返回值为true,函数将继续而不是退出。第二个区别是,在第二行中solve()不必返回truefalse,但可以返回非零值而不是true(如果solve()函数不返回bool值)。

第一个大小写:

if (solve(next_row, next_col))
    return true;

在这种情况下,当solve函数返回true时,它返回true,并且永远不会返回false。

第二个案例:

return solve(next_row, next_col);

如果solve返回true则返回true,否则返回false