求n阶方阵的值(递归)

时间:2024-08-01 10:04:32

若有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]的余子式;

代码:

 //***递归求n*n阶行列式的值
int matrix(int n, int a1[MAXN][MAXN])
{
int b[][], sum=; //****b保存当前n*n阶行列式a的余子式
if(n==) return a1[][]; //****n为1时结束递归
for(int i=; i<n; i++) //****通过循环求出当前行列式a[1][0]~a[1][n-1]的所有余子式
{
for(int j=; j<n-; j++)
{
int column=;
for(int k=; k<n; k++)
{
if(k==i) continue;
b[j][column++]=a1[j+][k]; //**将a[0][i]的余子式保存到b数组中
}
}
int flag=;
if(i&) flag=-;
sum+=flag*a1[][i]*matrix(n-, b);
}
return sum;
}