【发布时间】:2018-09-04 05:55:18
【问题描述】:
我写了一个递归函数来计算一个行列式。我知道我本可以更有效地完成它,但这不是重点。我有一个名为“det1”的变量,它在递归结束时保存行列式的最终值。 奇怪的是当我在 det 函数中返回这个值时,我得到了完全的垃圾。但是,当我只是简单地打印“det1”时,我得到了答案。这里有什么猜测吗?
int det1 = 0;
int p = 0;
int det(vector<vector<int> > (&A)){
if (A.size() != A[0].size()){
cout << "Determinant Error: non-square matrix. \n";
return 0;
}
int cF;
vector<vector<int> > temp01;
if (A.size() == 2){
det1 += (A[0][0]*A[1][1]-A[0][1]*A[1][0]);
//cout << "Determinant : " << det1 << "\n";
int output = det1; ///////////////////////////////////////Problem with final return
//cout << "Recursion Count : " << p << "\n";
//return(output); ///////////////////////////////////////
}else{//extract until a 2x2 is reached
for (int i = 0; i < A.size(); i++){
temp01 = extractNext(A,0, i);
//printMatrix(temp01);
cF = pow(-1, (0)+(i))*A[0][i];
//cout << "Cofactor : " << cF << "\n";
for (int j = 0; j< temp01.size(); j++){
temp01[0][j] = cF*temp01[0][j]; //account for cofactor by multiplying it in
}
//printMatrix(temp); cout << "\n";
p++;
det(temp01);
}
}
}
【问题讨论】:
-
提供Minimal, Complete, and Verifiable example。我们不知道您在
det中调用的函数是做什么的,以及您使用det本身的方式。 -
全局变量和递归并不是一个令人愉快的组合。
-
您的函数仅在出现错误时返回一个值。在所有其他情况下,使用(不存在的)返回值是未定义的。
-
永远不要使用全局变量。同时启用所有编译器警告,并将它们视为错误。
-
与您的问题无关,但使用
pow(-1, ...)是多余的。
标签: c++ recursion linear-algebra determinants