循环无限运行C++;骑士之旅问题 我正在用C++编写骑士巡游问题。但这一进程正在无限期地运行。我检查了我的逻辑,与上面提到的逻辑相似 #包括 使用名称空间std; 布尔值有效(矢量板,整数i,整数j) { 返回i>=0&&j>=0&&i

循环无限运行C++;骑士之旅问题 我正在用C++编写骑士巡游问题。但这一进程正在无限期地运行。我检查了我的逻辑,与上面提到的逻辑相似 #包括 使用名称空间std; 布尔值有效(矢量板,整数i,整数j) { 返回i>=0&&j>=0&&i,c++,algorithm,recursion,backtracking,knights-tour,C++,Algorithm,Recursion,Backtracking,Knights Tour,您尝试执行的是递归函数,但您没有退出条件,因此函数在循环中调用自身。您应该根据函数的目标在函数中的某个位置放置一个返回。例如: if (tour(board, i + 2, j + 1, steps) == 0) { return steps; } (这是一个例子,我不知道你的情况如何) 如果您想了解有关递归函数的更多信息,请访问以下网站: 此外,我建议您使用调试器来理解代码卡住的原因和位置 希望这有帮助:)现在是学习竞赛/在线评委网站不会教你的东西的好时机:调试!使用调试器,你可

您尝试执行的是递归函数,但您没有退出条件,因此函数在循环中调用自身。您应该根据函数的目标在函数中的某个位置放置一个返回。例如:

if (tour(board, i + 2, j + 1, steps) == 0)
{
    return steps;
}
(这是一个例子,我不知道你的情况如何)

如果您想了解有关递归函数的更多信息,请访问以下网站:

此外,我建议您使用调试器来理解代码卡住的原因和位置


希望这有帮助:)

现在是学习竞赛/在线评委网站不会教你的东西的好时机:调试!使用调试器,你可以在监视变量及其值的同时逐条检查代码语句,并查看它们是如何变化的。这是解决此类问题的正常方法。另外一些帮助你创建working pro的提示grams:。因此,我的意思是,你不会一次性编写大量代码(当然不是整个程序),只是在测试和调试困难时才进行测试。相反,只需编写尽可能小的代码(从空的
main
函数开始),构建(启用额外警告)和测试。只有当那段代码你继续下一个小而简单的代码。这样做直到程序完成。如果你通过引用通过你的程序板,它肯定会运行得更快。@Someprogrammerdude感谢你的建议。我试着调试代码,代码在最后几次迭代中运行良好,直到我强制停止它。B虽然逻辑是正确的,但代码似乎没有终止。嘿,谢谢!我的代码实际上终止了,但我没有得到它。为什么我们每次调用递归函数都返回步骤?不管怎样,我们都是在满足条件的情况下返回步骤。这还不够吗?当然!如果您只在f中返回步骤,那么第一个条件除非第一个条件是最后一步,否则程序不会停止,所以你需要在每个条件中都输入一个返回值(希望它是明确的,如果不是,你可以尝试添加一个注释到这个,或者在youtube上搜索递归函数和国际象棋示例或类似的内容)祝你好运!!!
if (tour(board, i + 2, j + 1, steps) == 0)
{
    return steps;
}