所以基本上,我想做的是制作一个将 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,但后来我想返回子矩阵,最后是整个矩阵。有没有人有任何建议,无论是关于如何“修复”这个返回问题,或者甚至是关于如何为这样的程序编写代码的更好的想法?