Algorytm wyznacznika macierzy C ++

Jestem nowym użytkownikiem programowania i szukałem sposobu na znalezienie wyznacznika macierzy. Znalazłem ten kod online, ale mam problem ze zrozumieniem zastosowanego algorytmu. Nie mam problemów z podstawą rekurencji, ale ciąg dalszy i pętla główna mam problemy ze zrozumieniem. Wielkie dzięki dla każdego, kto może mi wyjaśnić algorytm.

int determ(int a[MAX][MAX],int n) {
  int det=0, p, h, k, i, j, temp[MAX][MAX];
  if(n==1) {
    return a[0][0];
  } else if(n==2) {
    det=(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
    return det;
  } else {
    for(p=0;p<n;p++) {
      h = 0;
      k = 0;
      for(i=1;i<n;i++) {
        for( j=0;j<n;j++) {
          if(j==p) {
            continue;
          }
          temp[h][k] = a[i][j];
          k++;
          if(k==n-1) {
            h++;
            k = 0;
          }
        }
      }
      det=det+a[0][p]*pow(-1,p)*determ(temp,n-1);
    }
    return det;
  }
}

questionAnswers(1)

yourAnswerToTheQuestion