-1
这里是方法,理想情况下应该通过在板上放置Q来解决八皇后问题,这样它们都不会相互威胁,但我似乎无法阻止它无限递归。从这个递归方法获取堆栈溢出?
public static void solve(int row, int col, int size, char[][] array) {
for (int i = 0; i < size - 2; i++) {
if (isSafe(row, col, size, array)) {
array[i][col] = 'Q';
} else {
if (col < size - 2) {
solve(row, col++, size, array); //changed ++ to +1
}
}
}
}
为了清楚起见,这里是包括 'isSafe' 的方法:
public static boolean isSafe(int row, int col, int size, char[][] array) {
//check column
for (int i = 0; i < size - 1; i++) {
if (array[i][col] == 'Q') {
return false;
}
}
//horizontal
for (int i = size - 1; i >= 0; i--) {
if (array[row][i] == 'Q') {
return false;
}
}
//up diagonal
while (row > 0 && col > 0) {
int x = row;
int y = col;
if (array[row - 1][col - 1] == 'Q') {
return false;
} else {
x--;
y--;
}
}
//down diagonal
while (row < size - 1 && col > 0) {
int x = row;
int y = col;
if (array[row + 1][col - 1] == 'Q') {
return false;
} else {
x++;
y--;
}
}
return true;
}
谢谢你,你可以在此有何启示。
编辑:所以我只是想通过将'++'更改为'+1'我能够停止堆栈溢出,但我的方法不像我想要的那样递归所以问题仍然存在
可能重复[什么是调试器,它如何帮助我诊断问题?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-如何可以帮助我诊断问题) – Raedwald
“仍然不会像我想要的那样递归[原文]”不是问题说明。显示输出和调试跟踪。 – Prune