朋友数组递归

时间:2016-11-15 18:21:15

标签: java arrays recursion

我正在尝试以递归方式执行朋友数组,如果arr1[i][j] = arr2[j][i],则一个数组是另一个数组的朋友,所以我尝试递归地执行此操作,但我只更改第一行,另一个保持相同,我有只用1个数组来做我的意思是我不能创建两个我想必须在同一个数组上的更改,我这样做了:

int friendArray[][] = {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16}
};

friendArrayRecursive(friendArray, 0,0);


private static void friendArrayRecursive(int[][] arr, int row, int col){
    if(row < arr.length){
        if (col < arr[row].length) {
            arr[row][col] = arr[col][row];
            friendArrayRecursive(arr, row, col + 1);
        } else {
            friendArrayRecursive(arr, row + 1, 0);

        }
    }
}

但是输出而不是:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

1 5 9 13 
5 6 10 14 
9 10 11 15 
13 14 15 16

如何保存其他值以更改2等等...?

2 个答案:

答案 0 :(得分:3)

正如nhouser9所说,你需要使用临时变量来交换值。然后,当然,如果你浏览所有单元格,交换将发生两次,因此它将被取消。因此,您只需使用比较(col&lt; row)来完成数组的一半。

private static void friendArrayRecursive(int[][] arr, int row, int col){
    if(row < arr.length){
        if (col < row) {
            int temp = arr[row][col];
            arr[row][col] = arr[col][row];
            arr[col][row] = temp;
            friendArrayRecursive(arr, row, col + 1);
        } else {
            friendArrayRecursive(arr, row + 1, 0);    
        }
    }
}

答案 1 :(得分:0)

if条件更改为

if(row >= arr.length)
  return;
if(col >= arr[row].length)
  return;
if(row < col) {
    int temp;
    temp = arr[row][col];
    arr[row][col] = arr[col][row];
    arr[col][row] = temp;
    friendArrayRecursive(arr, row, col + 1);
 } else {
    friendArrayRecursive(arr, row + 1, 0);
 }