利用递归与行列式展开定理求行列式的值(数组指针版)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用递归与行列式展开定理求行列式的值(数组指针版)相关的知识,希望对你有一定的参考价值。
今天用数组指针改写了一下行列式求值程序,代码:
1 #include <iostream> 2 #include <cmath> 3 using namespace std; 4 int main() 5 { 6 int rank; 7 void setDet(double*,int); 8 double valDet(double*,int); 9 cout<<"输入行列式的阶数:"; 10 cin>>rank; 11 double *DetPtr=new double[rank*rank]; 12 setDet(DetPtr,rank); 13 cout<<"行列式的值为:"<<valDet(DetPtr,rank)<<endl; 14 return 0; 15 } 16 void setDet(double *detPtr,int rank) 17 { 18 cout<<"输入行列式:"<<endl; 19 int m=rank*rank; 20 for(int i=0;i<m;i++) 21 cin>>detPtr[i]; 22 } 23 double valDet( double* detPtr, int rank) 24 { 25 double val=0; 26 if(rank==1) return detPtr[0]; 27 for(int i=0;i<rank;i++) //计算余子式保存在nextDetPtr[]中 28 { 29 double *nextDetPtr=new double[(rank-1)*(rank-1)]; 30 for(int j=0;j<rank-1;j++) 31 for(int k=0;k<i;k++) 32 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k]; 33 for(int j=0;j<rank-1;j++) 34 for(int k=i;k<rank-1;k++) 35 nextDetPtr[j*(rank-1)+k]=detPtr[(j+1)*rank+k+1]; 36 val+=detPtr[i]*valDet(nextDetPtr,rank-1)*pow(-1.0,i); 37 } 38 return val; 39 }
以上是关于利用递归与行列式展开定理求行列式的值(数组指针版)的主要内容,如果未能解决你的问题,请参考以下文章