我试图用递归方法将两个二维数组相乘。我写了这段代码
public static int mul(int i, int j, int[][]A, int[][] B){
if(i>(A.length-1) && j>(A[i].length-1)) return 0;
int x = A[i][j]*B[i][j];
System.out.println(x);
return mul(++i, ++j, A, B);
}
public static void main(String[] args){
Scanner k= new Scanner(System.in);
int[][] A = new int[2][2];
int[][] B = new int[2][2];
for(int i=0;i<A.length;i++){
for (int j=0;j<(A[0].length); j++){
A[i][j]=k.nextInt();
}
}
for(int i=0;i<B.length;i++){
for (int j=0;j<(B[0].length); j++){
B[i][j]=k.nextInt();
}
}
mul(0, 0, A, B);
}
但我收到一条错误信息:
java.lang.ArrayIndexOutOfBoundsException:2
at recursive.mul(recursive.java:5)
at recursive.mul(recursive.java:7)
at recursive.mul(recursive.java:7)
在recursive.main上(recursive.java:32)
非常感谢!
最佳答案
首先检查矩阵之间是否可以相乘。为此,检查第一个矩阵的列数是否等于第二个矩阵的行数。如果两者都等于,则继续,否则生成“不可能”的输出。
在递归矩阵乘法中,我们通过递归调用实现了三个迭代循环multipleMatrix()的最内部递归调用是迭代k(col1或row2)。multipleMatrix()的第二个递归调用是更改列,最外层的递归调用是更改行。
下面是递归矩阵乘法码。
代码:
// Java recursive code for Matrix Multiplication
class GFG
{
public static int MAX = 100;
// Note that below variables are static
// i and j are used to know current cell of
// result matrix C[][]. k is used to know
// current column number of A[][] and row
// number of B[][] to be multiplied
public static int i = 0, j = 0, k = 0;
static void multiplyMatrixRec(int row1, int col1, int A[][],
int row2, int col2, int B[][],
int C[][])
{
// If all rows traversed
if (i >= row1)
return;
// If i < row1
if (j < col2)
{
if (k < col1)
{
C[i][j] += A[i][k] * B[k][j];
k++;
multiplyMatrixRec(row1, col1, A, row2, col2, B, C);
}
k = 0;
j++;
multiplyMatrixRec(row1, col1, A, row2, col2, B, C);
}
j = 0;
i++;
multiplyMatrixRec(row1, col1, A, row2, col2, B, C);
}
// Function to multiply two matrices A[][] and B[][]
static void multiplyMatrix(int row1, int col1, int A[][],
int row2, int col2, int B[][])
{
if (row2 != col1)
{
System.out.println("Not Possible\n");
return;
}
int[][] C = new int[MAX][MAX];
multiplyMatrixRec(row1, col1, A, row2, col2, B, C);
// Print the result
for (int i = 0; i < row1; i++)
{
for (int j = 0; j < col2; j++)
System.out.print(C[i][j]+" ");
System.out.println();
}
}
// driver program
public static void main (String[] args)
{
int row1 = 3, col1 = 3, row2 = 3, col2 = 3;
int A[][] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
int B[][] = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
multiplyMatrix(row1, col1, A, row2, col2, B);
}
}
资料来源:
https://www.geeksforgeeks.org/matrix-multiplication-recursive/