Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: juice en 17 de Noviembre 2020, 16:21

Título: Multiplicacion de dos números o valores enteros con recursividad. Matrices
Publicado por: juice en 17 de Noviembre 2020, 16:21
Hola, mi pregunta sería ¿Como hago para resolver H^m siendo H una matriz NxN y m el exponente de la matriz, utilizando solo recusividad?

¿Cómo hago para hacer un programa que genere una matriz (de manera recursiva) y sea elevada a una potencia, de manera que se multiplique por ella misma (de manera recursiva), es decir, Matriz H, H^n -> (HxHx...xH) y que además cuando termine de multiplicarse pueda aumentar su tamaño (de manera recursiva) para generar otra y hacer la multiplicacion nuevamente? Por ejemplo:

Matriz H 3x3 -> H^2 luego de  su tamaño aumenta en 2
Matriz H 5x5 -> H^2
Matriz H 7x7 -> H^2
(SIN CICLOS REPETITIVOS, UNICAMENTE RECURSIVIDAD)

de ser posible en lenguaje java o alguno que se parezca por favor.

hasta ahora solo he conseguido generar la matriz asi, agradezco su ayuda

Código: [Seleccionar]
import java.util.Scanner;

public class Recursividad {

    int i = 0, j = 0, N = 3;
    Scanner n = new Scanner(System.in);

    int matriz[][] = new int [N][N];

    public void matriz_generada() {
            filas();
    }

    public void filas() {

        if (i < N) {
            columnas();
            System.out.println("");
            i = i + 1;
            filas();
        }

    }

    public void columnas() {
       
        if (j < N) {
            matriz[i][j] = (int) (Math.random() * 10);
            System.out.print("[" + matriz[i][j] + "]");
            j = j + 1;
            columnas();
        }
       
        j = 0;
    }
}
Título: Re: Multiplicacion de Matriz con Recursividad
Publicado por: System.out.println(User); en 17 de Noviembre 2020, 21:38
Hola juice.
Te adjunto en este mensaje, un método que multiplica dos números/valores enteros (tanto positivos como negativos), de forma recursiva.
No sé si se podría "traducir" y adaptarlo en base de las especificaciones de tu programa con matrices, pero igual te puede ayudar.
Un saludo.

Código: [Seleccionar]
  static int multiplicar (int x, int y)
  {
    if (x == 0 || y == 0)
    {
        return 0;
    }
    else if (y < 0)
    {
      return -x + multiplicar (x, y + 1);
    }
    else
    {
      return x + multiplicar (x, y - 1);
    }
  }
Título: Multiplicacion de matrices
Publicado por: juice en 20 de Noviembre 2020, 05:43
¿Como puedo multiplicar 2 matrices nxn utilizando solo recursividad? (la matriz ya fue generada aleatoriamente en otra clase, es decir, necesito usar la matriz de la clase donde fue creada y multiplicarla por si misma en otra clase utilizando recursividad).

este es el codigo para que vean las variables :|

Código: [Seleccionar]
int N = 5, i, j;
        double matriz[][] = new double[N][N];

        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                matriz[i][j] = (int) (Math.random() * 10);
                System.out.print("[" + matriz[i][j] + "]");
            }
            System.out.println("");
        }
Título: Re: Multiplicacion de matrices
Publicado por: Kabuto en 20 de Noviembre 2020, 11:58
Por la red he encontrado este código, mira a ver si te sirve:

Código: [Seleccionar]
public class multiMatrizRecursivo {
 
   public void multiplicacionMatriz(int [][] A,int [][] B)
   {
       if (A[0].length==B.length)
 
       {
           int[][] C = new int[A.length][B[0].length];
           multiplicacionMatriz(A, B, C, 0);
           imprimir(C);
       }else
       {
           System.out.println("Matrices ingresadas no son compatibles");
       }
   }
 
   private void multiplicacionMatriz(int [][] A,int [][] B,int [][]C,int i)
   {
 
       if (i<A.length)
       {
           multiplicacionMatriz(A,B,C,i,0);
           multiplicacionMatriz(A,B,C,i+1);
       }
   }
 
   private void multiplicacionMatriz(int [][]A,int [][]B,int [][]C,int i,int j)
   {
       if (j<B[0].length)
       {
           multiplicacionMatriz(A,B,C,i,j,0);
           multiplicacionMatriz(A,B,C,i,j+1);
       }
   }
 
   private void multiplicacionMatriz(int [][]A,int [][]B,int [][]C,int i,int j,int k)
   {
       if (k<A[0].length)
       {
           C[i][j] += A[i][k] * B[k][j];
           multiplicacionMatriz(A,B,C,i,j,k+1);
       }
   }
 
   public void imprimir(int [][] C)
   {
 
       for (int i=0;i<C.length;i++)
       {
           for(int j=0;j<C.length;j++)
           {
               System.out.print("["+C[i][j]+"]");
           }
           System.out.println();
       }
   }
 
}