Recursividade / determinante de matriz

eae galera, blz? estou tentando construir um metodo que retorne o derterminante de uma matriz de ordem nxn usando de recursividade utilizando o metodo de laplace, a minha dificuldade esta em ir acumulando o valor a cada interação, em linguagem c basta passar uma variavel como referencia e ir acumulando nesta, por ser novo em java, não consegui encontrar uma alternativa que se equivale a variaveis passadas por refencia em linguagem funcional, e uma linguagem como java deve haver uma saida bem mais pratica e eficiente, segue abaixo o que conseguir fazer ate agora:

[code]public int DetMatriz(int mat[][], int ord) {

	if (ord == 1)
		return (mat[0][0]);
	if (ord == 2) return ( mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1] );
	else {
		int[][] matAux = new int[ord - 1][ord - 1];
		int colAux = 0;
		
		for (int controle = 0; controle < ord; controle++) {

			for (int linha = 1; linha < ord; linha++) {
				for (int coluna = 0; coluna < ord; coluna++)
					if (controle != coluna)
						matAux[linha - 1][colAux++] = mat[linha][coluna];

				colAux = 0;
			}
			return ( (int) Math.pow((-1), controle) * mat[0][controle] * DetMatriz(
					matAux, ord - 1) );
			}
	}
}[/code]

espero que alguem possa me ajudar, desde ja agradeço. Mario.

você pode criar uma variável que pertença à classe e não ao método.
basta declarar a variável fora do método e acessála dentro do método usando a sintaxe this.nomeVariável. ex:

public class Ftabah{
    private int variavel;
    public void divideEImprimeAteUm(){
        if(this.variavel/2 >= 1){
            System.out.println(this.variavel);
            this.variavel = this.variavel/2;
            divideEImprimeAteUm();
        }
        else
            System.out.println("fim");
    }
}

[quote=ftabah]você pode criar uma variável que pertença à classe e não ao método.
basta declarar a variável fora do método e acessála dentro do método usando a sintaxe this.nomeVariável. ex:

public class Ftabah{ private int variavel; public void divideEImprimeAteUm(){ if(this.variavel/2 >= 1){ System.out.println(this.variavel); this.variavel = this.variavel/2; divideEImprimeAteUm(); } else System.out.println("fim"); } } [/quote]

entao ftabah dei uma modificada no codigo e ficou assim:

[code]private int DET;

public int DetMatriz(int mat[][], int ord) {

	if (ord == 1)
		return (mat[0][0]);

	if (ord == 2) return (mat[0][0] * mat[1][1] - mat[1][0] * mat[0][1]);
        else {
		int[][] matAux = new int[ord - 1][ord - 1];
		int colAux = 0;

		for (int controle = 0; controle < ord; controle++) {

			for (int linha = 1; linha < ord; linha++) {
				for (int coluna = 0; coluna < ord; coluna++)
					if (controle != coluna)
						matAux[linha - 1][colAux++] = mat[linha][coluna];

				colAux = 0;
			}
			
			if (mat[0][controle] != 0) this.DET += (int) Math.pow((-1), controle)
						* mat[0][controle] * DetMatriz(matAux, ord - 1);
		}
	}
	return (this.DET);
}[/code]

para as matrizes :
1 0 0 0
1 1 1 1
2 3 4 9
2 4 10 28

e

1 0 0
1 1 1
2 3 5

o determinante da certo, mais por exemplo para a matriz:

1 0 0 0 0
1 1 1 1 1
2 3 5 9 17
2 4 10 28 82
2 5 17 65 257

da errado, :shock: ?

abrass

é só pra matrizes quadradas esse método ou ele é válido para outros tipos de matrizes?
vc tá fazendo a regra de Sarrus né? eu não manjo mto essa regra pra analisar seu código… faz tempo que eu não vejo conceitos matemáticos, hehehe…

Agora eu lembro que tinha uma somatória na fórmula, você está fazendo somatória? (mals a preguiça de tentar entender seu código)

abs

[quote=ftabah]é só pra matrizes quadradas esse método ou ele é válido para outros tipos de matrizes?
vc tá fazendo a regra de Sarrus né? eu não manjo mto essa regra pra analisar seu código… faz tempo que eu não vejo conceitos matemáticos, hehehe…

Agora eu lembro que tinha uma somatória na fórmula, você está fazendo somatória? (mals a preguiça de tentar entender seu código)

abs[/quote]

:smiley: kkk então eu to usando laplace, mais vlw pela ajuda, antes nem dava resultado algum kk, ja é um começo…vlw

Só para ser chato: não existe determinante de matrizes não quadradas e o método de Sarrus só funciona para matrizes 3x3.

Até!