在Java中递归填充Matrix(2d数组)

时间:2013-11-23 01:26:19

标签: java arrays recursion multidimensional-array

我有一个Java编程任务,在其中一个问题中,我必须填充一个布尔的2d数组(矩阵)到处都是“false”。我使用以下两个循环来完成它:

// The length and width are given

boolean [][] matrix; 
matrix = new boolean [length][width];

int row;
int col;

for (row = 0; row < length; row++)
{
   for (col = 0; col < width; col++)
   {
      matrix[row][col] = false;
   }
} 

问题是我们刚开始递归章节,我想如果有办法做同样的事情,但这次只使用递归... 谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用递归模仿嵌套循环结构:

public static void fillWithFalse(boolean[][] array, int row) {
    if (row < array.length) {
        fillWithFalse(array[row], 0);
        fillWithFalse(array, row + 1);
    }
}

public static void fillWithFalse(boolean[] array, int col) {
    if (col < array.length) {
        array[col] = false;
        fillWithFalse(array, col + 1);
    }
}

public static void fillWithFalse(boolean[][] array, int row, int col) {
    if (row < array.length) {
        if (col < array[row].length) {
            array[row][col] = false;
            fillWithFalse(array, row, col + 1);
        } else {
            fillWithFalse(array, row + 1, 0);
        }
    }
}

这是相同的逻辑。但是递归对于这种事情并不好,而且用错误填充数组正确的解决方案是这样的:

boolean[][] matrix = new boolean[length][width];

因为布尔数组将默认初始化,所有元素都为false。如果赋值实际上是用false填充布尔数组,那么它可能基本上是一个技巧问题,因为除了实例化数组之外不需要任何操作。

答案 1 :(得分:0)

嗯,不知道为什么有必要......但是......这是我的解决方案:

public static void insertFalse(boolean [][] arr,int row,int column)
{
    if(row == 0&&column==0)
        return ;
    arr[row][column] = false;
    if(column == 0)
          insertFalse(arr,row-1,arr[0].length-1);
    else
        insertFalse(arr, row, column-1);
}