0
所以基本上,我想要做的是製作一個方法,以2個矩陣作爲參數,並將它們相乘。這是一項學校任務,我要求通過遞歸「分而治之」來解決這個問題。這是我的代碼到目前爲止:用於遞歸矩陣乘法的Java方法?
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,但後來我想返回子矩陣,最後返回整個矩陣。有沒有人有任何建議,無論是關於如何「修復」這個回報問題,或者甚至更好的想法如何編寫這樣的程序的代碼?
我意識到這一點,我也試圖這麼說:p事情是,並且據我所知,這個代碼(我得到了一個僞代碼)與它自己一起工作,直到它只有1個int來相乘和另外一個。在這一點上,代碼只是返回一個int。但它的遞歸,從現在開始,它應該返回一個c int [sub] [sub]直到它最後返回c [n] [n],其中n是數組維度的最大長度。這些數組是n x n btw。我有點困惑於如何將所有這一切都變成一種工作遞歸方法,但據我所知,我必須使用另一種方法,除非我以另一種方式聲明int。 – mathkid91