【发布时间】:2014-01-17 19:42:50
【问题描述】:
我编写了一个递归函数 (nextMove),旨在通过 Win 32 控制台中的 12x12 矩阵表示的迷宫找到路径。不幸的是,当我尝试使用 Visual Studio 运行它时,控制台会话在几十次迭代后异常终止,并且在没有给我任何信息的情况下消失。
这是堆栈溢出吗?
可能是因为我正在读取一个矩阵、定义一些变量并在 nextMove 中调用其他函数,这对于堆栈来说太多了,而且很麻烦……但我不确定。
递归函数如下: (提前道歉,它不会赢得任何美丽/优雅的比赛,因为我对编程很陌生)
void nextMove(char A[size][size], int lRow, int lCol, int cRow, int cCol)
{
A[lRow][lCol] = '.';
A[cRow][cCol] = 'X';
printMatrix(A);
if (isBorder(cRow, cCol)) { return; }
else {
int r, c; // temporary row and col
int lastMove = move(cRow - lRow, cCol - lCol);
for (int i = -1; i <= 2; i++) {
r = cRow + row((lastMove + i) % 4);
c = cCol + col((lastMove + i) % 4);
if (allowableMove(A, r, c)) {
nextMove(A, cRow, cCol, r, c);
break;
}
} // end for
} // end else
} // end nextMove
【问题讨论】:
-
从命令提示符运行程序。这样,窗口将不会关闭,您将能够看到写入控制台的任何错误。
-
您是否通过在末尾附近放置断点来检查它是否合法完成?
-
@Zeta,抱歉,当我尝试运行它时已编辑。谢谢
-
@sftrabbit 是的,我已经设置了一些断点,它似乎成功地通过了迷宫,直到突然终止
-
由于您是编码新手,所以我只想做这个旁注。在您的循环中,您设置
i = -1。除非你的循环需要从那里开始,否则你应该像其他人一样从0开始。我猜你这样做了,所以你的算术将在接下来的两行中计算出来。要解决这个问题,只需让这些行使用lastMove + i - 1。这样,您的循环从 0 开始,并且您的算术保持正确。 (您可能还必须将循环限制更改为 3)
标签: c++ recursion stack-overflow