MODULE mod_det IMPLICIT NONE CONTAINS RECURSIVE FUNCTION det(a) RESULT(res) IMPLICIT NONE REAL (KIND = 8), INTENT(IN) :: a(:, :) REAL (KIND = 8) :: res, wk(SIZE(a, 1) - 1, SIZE(a, 1) - 1) INTEGER :: i, n n = SIZE(a, 1) res = 0.0d0 IF (n == 1) THEN res = a(1, 1) ELSE DO i = 1, n wk(:, 1:i - 1) = a(2:, 1:i - 1) wk(:, i:n - 1) = a(2:, i + 1: n) res = res + REAL((-1)**(i - 1), KIND = 8) * a(1, i) * det(wk) END DO END IF RETURN END FUNCTION det END MODULE mod_det