求n阶方阵的值(递归)

若有n*n阶行列式A,则:

|A|=A[1][1]*M[1][1]+A[1][2]*M[1][2]+...A[1][n]*M[1][n];其中M[1][i] 表示原矩阵元素A[1][i]的代数余子式;

又M[1][i]是一个n-1阶的方正行列式,其值又可以由上诉公式推出.....;

以此类推,直到n为1结束;再递归得到|A|;

 

A[i][j]的代数余1子式M[i][j]=pow(-1, i+j)*C[i][j];C[i][j]为A[i][j]的余子式;

 

代码:

 1 //***递归求n*n阶行列式的值
 2 int matrix(int n, int a1[MAXN][MAXN])
 3 {
 4     int b[10][10], sum=0;          //****b保存当前n*n阶行列式a的余子式
 5     if(n==1) return a1[0][0];     //****n为1时结束递归
 6     for(int i=0; i<n; i++)        //****通过循环求出当前行列式a[1][0]~a[1][n-1]的所有余子式
 7     {
 8         for(int j=0; j<n-1; j++)
 9         {
10             int column=0;
11             for(int k=0; k<n; k++)
12             {
13                 if(k==i) continue;
14                 b[j][column++]=a1[j+1][k];  //**将a[0][i]的余子式保存到b数组中
15             }
16         }
17         int flag=1;
18         if(i&1) flag=-1;
19         sum+=flag*a1[0][i]*matrix(n-1, b);  
20     }
21     return sum;
22 }

 

posted @ 2016-09-21 18:02  geloutingyu  阅读(705)  评论(0编辑  收藏  举报