Вычисляя Определитель массива за собой рекурсивный с#
Ну, это вызывает у меня настоящую головную боль. Я строю матричную детерминантную функцию для вычисления детерминанта NxN и использую рекурсию. Логика работает правильно, но я не могу правильно вычислить конечное значение.
Вот мой код для матричного детерминанта:
public static double determinant(double[,]array){ double det=0; double total = 0; double[,] tempArr = new double[array.GetLength(0) - 1, array.GetLength(1) - 1]; if(array.GetLength(0)==2) { det = array[0, 0] * array[1, 1] - array[0, 1] * array[1, 0]; } else { for (int i = 0; i <1; i++) { for (int j = 0; j < array.GetLength(1); j++) { if (j % 2 != 0) array[i, j] = array[i, j] * -1; tempArr= fillNewArr(array, i, j); det+=determinant(tempArr); total =total + (det * array[i, j]); } } } return det; }
а что касается метода fillNewArr, то это просто метод обрезки массива, метод заключается в следующем:
public static double[,] fillNewArr(double[,] originalArr, int row, int col) { double[,] tempArray = new double[originalArr.GetLength(0) - 1, originalArr.GetLength(1) - 1]; for (int i = 0, newRow = 0; i < originalArr.GetLength(0); i++) { if (i == row) continue; for (int j = 0, newCol=0; j < originalArr.GetLength(1); j++) { if ( j == col) continue; tempArray[newRow, newCol] = originalArr[i, j]; newCol++; } newRow++; } return tempArray; }
Метод работает так, как он должен был "я предполагаю", но конечный результат не вычисляется правильным образом, почему бы это не было?!
Пример массива 4x4:
{2 6 6 2} {2 7 3 6} {1 5 0 1} {3 7 0 7}
Конечный результат должен быть -168, а мой-104!
Mehdi Gholam
Очевидно, что ваша логика неверна, если вы не получаете ожидаемого ответа.