Backtracking方法的StackOverFlowError

时间:2016-01-11 03:37:41

标签: java arrays stack-overflow backtracking

我在使用此方法时遇到一些麻烦,得到一个StackOverFlowError。我正试图从这个页面Puff Ball

自动解决这些谜题
<tr>
    <td>__data1__</td>
    <td>
        <a href="javascript:void(0)" onclick="callFunctionA('__data2__');">click me</a>
    </td>
</tr>

它可以在每个调用问题中通过电路板吗?它有下一个变量:

public static boolean backtrackingPuffBalls(Board board, int[] steps, int ball,int index){
    if(!(checkValidPosition(board))){
        if(checkSolution(board)){
            numberSolutions++;
            solutions[numberSolutions] = steps;
        }
        else{
            return false;
        }
    }
    else{
        while(ball<board.getNumObjectives()+1){
            puffBall(board, ball);
            if(backtrackingPuffBalls(board, steps, ball, index++)){
                return true;
            }
            else{
                ball++;
                index--;
            }
        }
    }

    return false;

}

包含方法的代码:

    int[][] board;
    int numObjectives;
    boolean solvable, solved;
    int[] movements;
    boolean valid;
    Coordinates[] objectives;
    Coordinates[] balls;

“solutions []”和“numberSolutions”是全局变量 我想我可以修复“board.getBoard()”代码,但它不应该影响回溯

1 个答案:

答案 0 :(得分:2)

您看到StackOverFlowError的原因是您正在对backtrackingPuffBalls()方法进行无限次的递归调用。我预计会出现else条件不断发生的情况,并且每次调用最终都会进行另一次递归调用。

要解决此问题,您需要整理逻辑并确保递归在适当的时间结束。

调试器是你最好的朋友,你可以通过单步调试代码来了解发生了什么。