递归之谜

时间:2017-12-02 20:03:08

标签: java recursion

我试图为下一个作业运行递归函数:

我有一个带有nXn列和行的布尔板。

我想从" row"指定的某些点在对角线(即↖↗↘search)上搜索一个真值。和" col"

当我在特定行中找到TRUE值时 - 我将其添加到计数器中,并停止查看特定行。

我想在对角线中返回TRUE值的数量(minimun = 0 - maximun = 4)

F F T F

F T F F

F F F F

F F F T

例如,搜索点为 T {1,1}。我需要返回2号。

public static int Cross (boolean[][] board, int row, int col, int row2, int col2){ //function to check Cross Threat
    int countCross=0;
    if(row2>=board.length | row2<0 | col2>=board.length | col2<0) //out of bounds - 0
        countCross=0;
    else if(board[row2][col2] & (row2!=row & col2!=col)) 
        countCross=1;
    else
        countCross=Cross(board, row, col, row2+1, col2+1)+Cross(board, row, col, row2-1, col2-1)+Cross(board, row, col, row2+1, col2-1)+Cross(board, row, col,row2-1, col2+1);
    return countCross;
}

问题在于,我运行此功能,我的Eclipse冻结了。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将方向合并到Cross方法中(您的方法名称应以较低的字母开头)。否则,您的递归调用也会尝试进入四个不同的方向。一种方法可能是创建一个非递归的公共方法,每个方向调用一次私有递归方法。