最近复习线性代数,看到一个很适合写递归的东西,那就是利用代数余子式计算行列式,简单实现一下嘿嘿.
#include<vector>
#include<iostream>
#include<math.h>
using namespace std;
vector<vector<double>> disposeRest(vector<vector<double>> ori, int index) //余子式
{
int coln = ori[0].size();
int rown = ori.size();
vector<vector<double>> ansV;
for (int i = 1; i < rown; i++)
{
vector<double>row;
for (int j = 0; j < coln; j++)
{
if (j != index)
row.push_back(ori[i][j]);
}
ansV.push_back(row);
}
return ansV;
}
double Arraycal(vector<vector<double>> tem)
{
bool jud = 1;
if(tem.size()<2)
jud =0;
for (int i = 0; i < tem.size(); i++)
{
if (tem[i].size() != tem.size())
{
jud = 0;
break;
}
}
if (!jud)
{
cerr << "Error Array!" << endl;
return INT_MAX;
}
double ans = 0;
if (tem.size() == 2)
{
ans = tem[0][0] * tem[1][1] - tem[0][1] * tem[1][0];
return ans;
}
else
{
for (int i = 0; i < tem[0].size(); i++)//展开第一行
{
int negativeF = pow(-1, (i % 2));
vector<vector<double>> temp = disposeRest(tem,i);
ans += tem[0][i] * negativeF * Arraycal(temp);
}
}
return ans;
}
int main()
{
vector<vector<double>> vec = { {1,2,3},{3,5,5},{10,9,8}};
double ans = Arraycal(vec);
cout << ans << endl;
return 0;
}
以下为用python的各验证结果