// Calcula el determinante de una matriz usando un metodo recursivo ldouble Determinante(ldouble **m, int n) { // Revisa que la matriz este inicializada if (!m) { printf("Error la matriz no ha sido inicializada"); return 0.0; } ldouble det = 0.0; if (n > 2) { int i, j, k, r, c, l , s; ldouble **xm; if (!(xm = SolicitaMemoria(n-1,n-1))) return 0.0; for (i = 0; i < n; i++) { if (m[0][i] == 0.0) continue; r = c = 0; for (j = 1; j < n; j++) { for (k = 0; k < n; k++) { if (k == i) continue; xm[r][c] = m[j][k]; c++; } r++; c = 0; } s = 1; for (l = 0; l < i; l++) s = s * -1; det = det + (m[0][i] * Determinante(xm, n-1) * s); } LiberaMemoria(xm,n-1,n-1); } else { det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; } return det; }