递归矩阵的Java方法乘法?

时间:2014-01-28 20:48:57

标签: java arrays return dimensional

所以基本上,我想做的是创建一个以2个矩阵作为参数并将它们相乘的方法。这是一项学校任务,我要求使用递归的“分而治之”来解决这个问题。到目前为止,这是我的代码:

public class RecMult {

    public int[][] calc(int[][] a, int[][] b) {

        int n = a.length;
        int[][] c = new int[n][n];

        if (n == 1) {
            c[0][0] = a[0][0] * b[0][0];
        } else {
            int sub = a.length / 2;
            int[][] smalla11 = new int[sub][sub];
            int[][] smalla12 = new int[sub][sub];
            int[][] smalla21 = new int[sub][sub];
            int[][] smalla22 = new int[sub][sub];
            int[][] smallb11 = new int[sub][sub];
            int[][] smallb12 = new int[sub][sub];
            int[][] smallb21 = new int[sub][sub];
            int[][] smallb22 = new int[sub][sub];

            for (int i = 0; i < sub; i++) {
                for (int j = 0; j < sub; j++) {
                    smalla11[i][j] = a[i][j];
                    smalla12[sub + i][j] = a[sub + i][j];
                    smalla21[i][sub + j] = a[i][sub + j];
                    smalla22[sub + i][sub + j] = a[sub + i][sub + j];
                    smallb11[i][j] = b[i][j];
                    smallb12[sub + i][j] = b[sub + i][j];
                    smallb21[i][sub + j] = b[i][sub + j];
                    smallb22[sub + i][sub + j] = b[sub + i][sub + j];
                }
            }
            c[0][0] = calc(smalla11, smallb11);
        }
        return c;
    }
}

我没有完成代码,因为我很快就遇到了问题。我无法将c[0][0]设置为calc(smalla11, smallb11)因为它需要一个int,而calc方法返回一个int [] []。我现在还不确定该做什么。有时,我本来想只返回一个int,但后来我想要返回子矩阵,最后返回完整的矩阵。有没有人有任何关于如何“修复”这个回归问题的建议,或者甚至更好的想法如何为这样的程序编写代码?

1 个答案:

答案 0 :(得分:0)

您试图将2维数组(calc(smalla11,smallb11)的结果)存储到单个元素c [0,0]中。 c已经被声明为二维数组。您是否有意将结果存储在单个点0,0?

这会做你需要的吗?

c =  calc(smalla11, smallb11);

这会让我的大脑受伤,但很有趣! :)