ehm.. era un loop infinito
risolto
questo è il codice definitivo, funziona, se a qualcuno serve...
occhio che non controlla se i calloc vanno a buon fine
codice:
double Determinante(double **Matrix, int Order) {
if (Order==2) return (Matrix[0][0]*Matrix[1][1]-Matrix[0][1]*Matrix[1][0]);
else {
int cx,cy,cz,xz,sign=1;
double **Compl=(double **)calloc(Order-1,sizeof(double *));
for (cx=0; cx<Order-1; cx++) *(Compl+cx)=(double *)calloc(Order-1,sizeof(double));
double Res=0;
for (cx=0; cx<Order; cx++,sign=-sign) {
for (cy=0,xz=0; cy<Order-1;xz++)
if (xz!=cx) {
for (cz=0; cz<Order-1; cz++) Compl[cy][cz]=Matrix[xz][cz+1];
cy++;
}
Res+=Matrix[cx][0]*Determinante(Compl, Order-1)*(double) sign;
}
free(Compl);
return Res;
}
}