logo

Multiplicació matricial | Recursiu

Donades dues matrius A i B. La tasca és multiplicar la matriu A i la matriu B de forma recursiva. Si la matriu A i la matriu B no són compatibles multiplicatives, genereu la sortida "No és possible".

Exemples:  

Input: A = 12 56  
45 78
B = 2 6
5 8
Output: 304 520
480 894
Input: A = 1 2 3
4 5 6
7 8 9
B = 1 2 3
4 5 6
7 8 9
Output: 30 36 42
66 81 96
102 126 150

Es recomana consultar primer Multiplicació matricial iterativa .



Primer comproveu si la multiplicació entre matrius és possible o no. Per a això comproveu si el nombre de columnes de la primera matriu és igual o no al nombre de files de la segona matriu. Si tots dos són iguals, procediu més endavant, en cas contrari, genereu la sortida "No és possible".

A la multiplicació de matrius recursives implementem tres bucles d'iteració mitjançant trucades recursives. La crida interior més recursiva de multiplicarMatrix() és iterar k (col1 o fila2). La segona crida recursiva de multiplicarMatrix() és canviar les columnes i la crida recursiva més externa és canviar les files.

qui és freddie mercury

A continuació es mostra el codi de multiplicació de matrius recursives. 

C++
// Recursive code for Matrix Multiplication #include  const int MAX = 100; void multiplyMatrixRec(int row1 int col1 int A[][MAX]  int row2 int col2 int B[][MAX]  int C[][MAX]) {  // 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  static int i = 0 j = 0 k = 0;  // 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[][] void multiplyMatrix(int row1 int col1 int A[][MAX]  int row2 int col2 int B[][MAX]) {  if (row2 != col1) {  printf('Not Possiblen');  return;  }  int C[MAX][MAX] = { 0 };  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++)  printf('%d ' C[i][j]);  printf('n');  } } // Driven Program int main() {  int A[][MAX]  = { { 1 2 3 } { 4 5 6 } { 7 8 9 } };  int B[][MAX]  = { { 1 2 3 } { 4 5 6 } { 7 8 9 } };  int row1 = 3 col1 = 3 row2 = 3 col2 = 3;  multiplyMatrix(row1 col1 A row2 col2 B);  return 0; } // This code is contributed by Aarti_Rathi 
Java
// 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 Possiblen');  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);  } } // Contributed by Pramod Kumar 
Python3
# Recursive code for Matrix Multiplication  MAX = 100 i = 0 j = 0 k = 0 def multiplyMatrixRec(row1 col1 A row2 col2 B C): # 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  global i global j global k # 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 += 1 multiplyMatrixRec(row1 col1 A row2 col2B C) k = 0 j += 1 multiplyMatrixRec(row1 col1 A row2 col2 B C) j = 0 i += 1 multiplyMatrixRec(row1 col1 A row2 col2 B C) # Function to multiply two matrices  # A[][] and B[][]  def multiplyMatrix(row1 col1 A row2 col2 B): if (row2 != col1): print('Not Possible') return C = [[0 for i in range(MAX)] for i in range(MAX)] multiplyMatrixRec(row1 col1 A row2 col2 B C) # Print the result  for i in range(row1): for j in range(col2): print( C[i][j] end = ' ') print() # Driver Code A = [[1 2 3] [4 5 6] [7 8 9]] B = [[1 2 3] [4 5 6] [7 8 9]] row1 = 3 col1 = 3 row2 = 3 col2 = 3 multiplyMatrix(row1 col1 A row2 col2 B) # This code is contributed by sahilshelangia 
C#
// C# recursive code for  // Matrix Multiplication using System; 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)  {  Console.WriteLine('Not Possiblen');  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++)  Console.Write(C[i j] + ' ');  Console.WriteLine();  }  }    // Driver Code  static public void Main ()  {  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);  } } // This code is contributed by m_kit 
JavaScript
<script>  // Javascript recursive code for Matrix Multiplication    let 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  let i = 0 j = 0 k = 0;    function multiplyMatrixRec(row1 col1 A row2 col2 B 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[][]  function multiplyMatrix(row1 col1 A row2 col2 B)  {  if (row2 != col1)  {  document.write('Not Possible' + '
'
); return; } let C = new Array(MAX); for(let i = 0; i < MAX; i++) { C[i] = new Array(MAX); for(let j = 0; j < MAX; j++) { C[i][j] = 0; } } multiplyMatrixRec(row1 col1 A row2 col2 B C); // Print the result for (let i = 0; i < row1; i++) { for (let j = 0; j < col2; j++) document.write(C[i][j]+' '); document.write('
'
); } } let row1 = 3 col1 = 3 row2 = 3 col2 = 3; let A = [ [1 2 3] [4 5 6] [7 8 9] ]; let B = [ [1 2 3] [4 5 6] [7 8 9] ]; multiplyMatrix(row1 col1 A row2 col2 B); </script>

Sortida
30 36 42 66 81 96 102 126 150 

Complexitat temporal: O (fila1 * col2 * col1)
Espai auxiliar: O (log (màx (fila1col2)) Com a pila implícita s'utilitza a causa de la recursivitat

 

Crea un qüestionari