求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 }
我就是我,颜色不一样的烟火 --- geloutingyu