Я написал рекурсивную функцию (nextMove), цель которой - найти путь через лабиринт, представленный матрицей 12x12 в консоли Win 32. К сожалению, когда я пытаюсь запустить его с помощью 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
Извиняюсь всем, и благодарю вас за ваши ответы.
После большей отладки я нашел ответ на свой вопрос и не имеет ничего общего с переполнением стека.
Это было потому, что я предположил, что оператор C++% работает как математическая версия модульной арифметики, выводя только 0,1,..., n -1 (mod n).
Когда я понял, что это не так (-1% 4 - -1, а не 3), я смог изменить свой код, чтобы алгоритм работал правильно.
Спасибо за помощь!