Есть несколько проблем с вашим кодом, кроме ошибки компиляции.
1) Поскольку dat
ожидает, что второй аргумент будет массивом, вызов функции должен быть:
det = det + (pow(-1, p) * mat[0][p] * dat(n - 1, submat));
2) Определитель матрицы 2x2 должен быть рассчитан следующим образом:
return((mat[0][0] * mat[1][1]) - (mat[1][0] * mat[0][1]));
3) int submat[10][10]
должно быть double submat[100][100]
, поскольку оно должно содержать (почти) столько элементов, сколько mat
, и хранить тот же тип данных.
4) Возвращаемое значение должно быть double
вместо int
.
5) Условие if (j == c)
должно быть if (j == p)
, поскольку p
- это строка / столбец, который мы хотим исключить.
6) Цикл i
должен начинаться с 1, поскольку мы не включаем первую строку / столбец в подматрицу.
7) s1
, r
и c
никогда не используются и могут быть удалены.
8) Возвращаемое значение должно быть det
Примечание: временная сложность этого алгоритма, называемого Расширение Лапласа , составляет O(n!)
(см. здесь ). Если вы хотите использовать его для производственного кода, я настоятельно рекомендую использовать более эффективный алгоритм, основанный на разложении матриц.