0

I am trying to multiply two 2D arrays using a recursive method. I wrote this code

   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);
    }

But I got this error message:

java.lang.ArrayIndexOutOfBoundsException: 2

at recursive.mul(recursive.java:5)

at recursive.mul(recursive.java:7)

at recursive.mul(recursive.java:7)

at recursive.main(recursive.java:32)

Thank you so much!

4
  • Why are you trying to use recursion for a non-recursive problem? Commented Feb 6, 2018 at 7:16
  • if(i>(A.length-1) && j>(A[i].length-1)) return 0; -> if(i>(A.length-1) || j>(A[i].length-1)) return 0; - note the && -> ||. Commented Feb 6, 2018 at 7:55
  • Because this is my homework Commented Feb 6, 2018 at 8:10
  • Try to edit your question in a better way.I had to derive your question from the title and the code you have written. Commented Feb 6, 2018 at 8:17

1 Answer 1

2

First check if multiplication between matrices is possible or not. For this, check if number of columns of first matrix is equal to number of rows of second matrix or not. If both are equal than proceed further otherwise generate output “Not Possible”.

In Recursive Matrix Multiplication, we implement three loops of Iteration through recursive calls. The inner most Recursive call of multiplyMatrix() is to iterate k (col1 or row2). The second recursive call of multiplyMatrix() is to change the columns and the outermost recursive call is to change rows.

Below is Recursive Matrix Multiplication code.

CODE:

// 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);
    }
}

Source:

https://www.geeksforgeeks.org/matrix-multiplication-recursive/

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.