从这个递归方法获得堆栈溢出?

时间:2017-03-22 13:52:57

标签: java recursion stack-overflow

这是方法,理想情况下应该通过将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
            }
        }
    }
}

为清楚起见,这里是包含的&#39; isSafe&#39;方法:

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;
}

感谢您对此有所了解 编辑:所以我只是想通过改变&#39; ++&#39;到&#39; + 1&#39;我能够阻止堆栈溢出,但我的方法不像我想要的那样递归,所以仍然存在一个问题

1 个答案:

答案 0 :(得分:0)

问题在于solve(row, col++, size, array); 直到解决之后,col才会递增。 您需要使用solve(row, ++col, size, array);