Невозможно рекурсивно сложить все четные числа в матрице - PullRequest
0 голосов
/ 26 мая 2018
public static void main(String[] args) {
    // TODO Auto-generated method stub
    int matriz[][]= {{1,2,3,4,5},{1,2,3,4,55}};

    System.out.println(sumMatriz(matriz, 0, 0));
}

public static int sumMatriz(int [][]matriz, int i, int j) {
    if(i>=matriz.length-1 && j>=matriz[i].length-1) {
        return matriz[i][j];
    }else {
        if(j>=matriz[i].length-1) {
            if(matriz[i][j]%2==0) {
                return matriz[i][j]+sumMatriz(matriz, i+1, 0);
            }else {
                return sumMatriz(matriz, i+1, 0);
            }

        }else {
            if(matriz[i][j]%2==0) {
                return matriz[i][j]+sumMatriz(matriz, i, j+1);
            }else {
                return sumMatriz(matriz, i, j+1);
            }

        }
    }

}

output
67

если я поставлю return 0; вместо return matriz[i][j]; внутри if(i>=matriz.length-1 && j>=matriz[i].length-1) {, не распознайте последний элемент матрицы и не суммируйте остальные.если поставить return matriz[i][j]; сумма всех парных чисел, включая последний элемент (ошибочный номер).

не знаю, что происходит благодаря

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Не уверен, если цель вашего упражнения - написать это рекурсивно (если это так, пожалуйста, проигнорируйте мой ответ), но если цель состоит в суммировании вашей многомерной матрицы, я бы написал это немного по-другому, примерно так:

public static void main(String[] args) {
    Integer matriz[][]= {{1,2,3,4,5},{1,2,3,4,55}};

    System.out.println(sumMatrix(matriz));
}

private static Integer sumMatrix(Integer matrix[][]) {
    return Arrays.asList(matrix)
        .stream()
        .flatMap(i -> Arrays.asList(i).stream())
        .filter(i -> i % 2 == 0)
        .collect(Collectors.summingInt(i -> i));
}
0 голосов
/ 26 мая 2018

Вы можете переписать свой sumMatriz следующим образом:

// I'm moving in the j direction till I can't go any further 
// in that row then I reset j and increase i (go to the next row)
// till I can't go any further
// Think of the recursive equivalent
// for(int i = 0; i < matriz.length; ++i) {
//     for(int j = 0; j < matriz[i].length; ++j) {
//          ... do stuff ...
//     }
// }
public static int sumMatriz(int [][]matriz, int i, int j) {
    // We have reached the maximum row index i so
    // we are done adding
    if(i >= matriz.length) {
        return 0;
    }

    // We have reached the maximum column index j for this row
    // jump to the next row and continue searching
    if(j >= matriz[i].length) {
        return sumMatriz(matriz, i + 1, 0);
    }

    if(matriz[i][j] % 2 == 0) {
        // The number is even so add it
        return matriz[i][j] + sumMatriz(matriz, i, j + 1);
    } else {
        // increase the column index j and continue
        return sumMatriz(matriz, i, j + 1);
    }
}

public static void main(String[] args) {
    int matriz[][] = {{1,2,3,4,5},{1,2,3,4,55}};

    System.out.println(sumMatriz(matriz, 0, 0));
    // outputs 12
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...