递归算法: double determinant(double **matrix,int dim) { double result = 0; int i,k; double **subMatrix = (double **) new double*[dim]; for(i = 0; i < dim; i++) subMatrix[i] = (double *) new double[dim]; if (dim == 2) { return matrix[0][0]*matrix[1][1]-matrix[0][1]*matrix[1][0]; } else { for (k = 0; k < dim; k++) { extraSubMatrix(matrix,dim,k,subMatrix); result += pow(-1,k) * matrix[0][k] * determinant(subMatrix,dim-1); } } deleteMatrix(subMatrix, dim); return result; } void extraSubMatrix(double **num, int a, int k, double **Num) { int i,j; for(i = 0; i < a-1; i++) { for (j = 0; j < a-1; j++) { if (j < k) Num[i][j] = num[i+1][j]; if(j >= k) Num[i][j] = num[i+1][j+1]; } } } void deleteMatrix(double **num, int a) { int i; for (i = 0; i < a; i++) delete [] num[i]; delete [] num; } 非递归算法(只适用与某些矩阵):