我正在创建一个suduko生成器,我在使用递归调用函数时遇到堆栈溢出,或者在使用类调用函数时不调用函数,我无法解释发生了什么但这是代码:
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语句跳过条件即使它是真的?还是有另一种方法吗?
答案 0 :(得分:0)
首先,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