需要帮助找到其成员总和在矩阵中最大的行号

时间:2016-12-30 10:50:57

标签: java recursion

我遇到了这个问题,我需要返回其成员带来矩阵中最大总和的行,问题需要是递归方法(没有循环) 我首先找到了最大的金额,但我不知道如何进一步,请帮助我

public class MatrixLen {

    private int [][] _mat;
    public MatrixLen(int sizeRow, int sizeCol)
    {
    _mat = new int[sizeRow][sizeCol];
    Random generator = new Random();
    for (int i = 0; i< sizeRow; i++){
        for (int j=0; j<sizeCol; j++){
            _mat[i][j] = generator.nextInt(20) - 10;
            System.out.print(_mat[i][j]+ " ");
        }
        System.out.println();
    }
    }
    private int SumRow(int i){
        return SumRow(i,0);
    }
    private int SumRow(int i, int j){
        if(j>=_mat[i].length) return 0;
        return _mat[i][j] + SumRow(i, j+1);
    }
    public int maxRow(){
        if(_mat.length==0) return -1;
        return maxRow(0);
    }
    private int maxRow(int i){
        if (i == _mat.length - 1) return SumRow(i); //end case - last row
        int max = maxRow (i + 1);
        int thisRow = SumRow(i);
        return thisRow > max ? thisRow : max;  
    }
}

2 个答案:

答案 0 :(得分:0)

您可以定义一个包含当前行索引的类以及总和。 E.g。

public class IndexSum {
    int index;
    int sum;

    public IndexSum(int index, int sum) {
        this.index = index;
        this.sum = sum;
    }
}

然后在MatrixLen修改maxRow方法中获取参数并返回IndexSum个对象。这样,在递归期间,您可以跟踪要与其他行进行比较的行的总和,以及该行的索引。

public IndexSum maxRow() {
    if (_mat.length == 0) return null;
    return maxRow(new IndexSum(0, SumRow(0)));
}

private IndexSum maxRow(IndexSum thisRow) {
    if (thisRow.index == _mat.length - 1) return thisRow; //end case - last row
    IndexSum nextRow = maxRow(new IndexSum(thisRow.index + 1 , SumRow(thisRow.index + 1)));
    return thisRow.sum > nextRow.sum ? thisRow : nextRow;
}

答案 1 :(得分:0)

会员字段是否被接受?

int index = -1;

private int maxRow(int i) {
    if (i == _mat.length - 1) {
        index = i;
        return SumRow(i); // end case - last row
    }

    int max = maxRow(i + 1);
    int thisRow = SumRow(i);

    if (thisRow > max) {
        index = i;
    }

    if (i == 0) {
        return index;
    }

    return thisRow > max ? thisRow : max;
}