利用递归与行列式展开定理求行列式的值

最近在上线性代数呢……根据行列式按行展开定理写了个行列式的求值程序。

递归:

代码实现:

 1 //determinant.cpp
 2 #include <iostream>
 3 #include <cmath>
 4 using namespace std;
 5 const int Max=100;           //修改Max可以修改最大阶数 
 6 double det[Max][Max]={0};
 7 void setDet(int);
 8 double valDet( double det[][Max], int);
 9 int main()
10 {
11     cout<<"输入行列式的阶数:";
12     int rank;
13     cin>>rank;
14     setDet(rank);
15     cout<<"行列式的值为:"<<valDet(det,rank)<<endl;
16     return 0;
17 }
18 
19 void setDet(int n)
20 {
21     cout<<"输入行列式:"<<endl; 
22     for(int i=0;i<n;i++)
23         for(int j=0;j<n;j++)
24             cin>>det[i][j];
25 }
26 double valDet( double det[][Max],int n)
27 {
28     double val=0;
29     if(n==1) return det[0][0];             //递归终点 30     for(int i=0;i<n;i++)                   //计算余子式保存在next[][]中 
31     {
32         double nextDet[Max][Max]={0};
33         for(int j=0;j<n-1;j++)
34             for(int k=0;k<i;k++)
35                 nextDet[j][k]=det[j+1][k];
36         for(int j=0;j<n-1;j++)
37             for(int k=i;k<n-1;k++)
38                 nextDet[j][k]=det[j+1][k+1];
39         val+=det[0][i]*valDet(nextDet,n-1)*pow(-1.0,i);  //递归 40     }
41     return val;
42 }

 运行图:

你可能感兴趣的:(利用递归与行列式展开定理求行列式的值)