递归。 return func()和if(func())之间的区别是什么?

时间:2013-03-19 18:42:03

标签: c++ recursion

我正在写一个数独求解器,我已经有了解决功能。

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);

然而,对于第二行,我的功能不起作用

5 个答案:

答案 0 :(得分:2)

如果solve(next_row, next_col)为假,则首先会继续执行功能。而第二个只会返回假。

答案 1 :(得分:0)

solve(next_row, next_col)返回一个布尔值,if(solve...)检查其返回值,如果问题解决,则决定返回true。

在递归中你需要一个条件来阻止它:

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

找到解决方案后会停止solve

答案 2 :(得分:0)

如果为if (solve(next_row, next_col)) return true;,则执行继续到下一行。返回仅在true时评估。这意味着如果条件在第一个条件中为假而在第二个条件中不是,则将执行board[row][col] = 0;

答案 3 :(得分:0)

在一般情况下,

之间存在两个差异
  

if(solve())返回true;

  

return solve();

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

答案 4 :(得分:0)

第一种情况:

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

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

第二种情况:

return solve(next_row, next_col);

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