递归调用失败

Recursion call failure

本文关键字:失败 调用 递归      更新时间:2023-10-16

我正在创建一个数独游戏生成器我要么在使用递归调用函数时得到堆栈溢出要么在使用类调用函数时不调用函数,我不能很好地解释发生了什么但这是代码:

sudoku::sudoku()
{
    srand((unsigned int)time(NULL));
    generate();       // call the generate function
    display(1);
}
sudoku::~sudoku()
{}
bool sudoku::validate(){     //makes sure not more than one of the same number in row/column
    for (int x = 0; x < size; x++){
        for (int y = 0; y < size; y++){
            if (number == Array[x][y])
                return true;
        }
    }
    return false;
}
void sudoku::generate(){          // generates sudoku numbers which is 9x9 
    for (int x = 0; x < size; x++){
        for (int y = 0; y < size; y++){
            number = 1;
            if (validate() == true){
                generate();          //get a stack overflow with this call 
                                 //if I change "generate" to "sudoku generate" the
                                 //stack overflow doesn't happen but then the function 
            }                        //is not called, the if statement just skips to the else 
            else{
                Array[x][y] = number;
            }
        }
      }
   }

是否有一种方法来调用"sudoku generate()"没有if语句跳过条件,即使它是真的?或者还有别的方法吗?

首先if语句是多余的

if(validate()==true)

validate返回一个布尔值,对吗?为什么把它等同于另一个布尔值呢?你可以这样写:

if(validate())

堆栈溢出可能是由于过多调用generate()和validate()函数引起的,记住每次调用递归都会将该函数的另一个实例推送到堆栈中。为了解决这个问题,你可能想看看花瓶的交流原则:https://www.youtube.com/watch?v=q1G6S0DbnJY或者你可以在edX上旁听这门课程,快速了解不变编程和通信花瓶的原理:https://courses.edx.org/courses/LouvainX/Louv1.01x/1T2014/info

相关文章: