递归调用失败
Recursion call failure
我正在创建一个数独游戏生成器我要么在使用递归调用函数时得到堆栈溢出要么在使用类调用函数时不调用函数,我不能很好地解释发生了什么但这是代码:
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
相关文章:
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- join() 失败,如果在线程内部调用 io_context.run()
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么此对箭头 (->) 运算符的调用失败?
- 链接器命令失败,macOS 上的退出代码为 1(使用 -v 查看调用)
- 无法调用成员函数,尝试正确执行此操作仍然失败
- 非静态成员失败的线程调用函数
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- G++ 内联在调用always_inline "int _rdrand16_step()"时失败
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- 从 C#-DLL 调用函数的 C++ 失败
- Xcode:链接器命令失败,退出代码为 1(使用 -v 查看调用)[C++]
- 为什么在谷歌测试中调用"mkdtemp()"时失败
- 为什么 std::get<T> 其中 T 是调用 constexpr 函数失败的结果?
- OpenCV c++ 断言失败调用绘制轮廓