mam taki program:

double det(int n, int w, int * WK, double ** A)
{
  int    i,j,k,m, * KK;
  double s;

  if(n == 1)                                    // sprawdzamy warunek zakończenia rekurencji

    return A[w][WK[0]];                         // macierz 1 x 1, wyznacznik równy elementowi

  else
  {

    KK = new int[n - 1];                        // tworzymy dynamiczny wektor kolumn

    s = 0;                                      // zerujemy wartość rozwinięcia
    m = 1;                                      // początkowy mnożnik

    for(i = 0; i < n; i++)                      // pętla obliczająca rozwinięcie
    {

      k = 0;                                    // tworzymy wektor kolumn dla rekurencji

      for(j = 0; j < n - 1; j++)                // ma on o 1 kolumnę mniej niż WK
      {
        if(k == i) k++;                         // pomijamy bieżącą kolumnę
        KK[j] = WK[k++];                        // pozostałe kolumny przenosimy do KK
      }

      s += m * A[w][WK[i]] * det(n - 1,w  + 1, KK, A);

      m = -m;                                   // kolejny mnożnik

    }

    delete [] KK;                               // usuwamy zbędną już tablicę dynamiczną

    return s;                                   // ustalamy wartość funkcji

  }
}

chciałbym wiedzieć jak działa ten program. Oczywiście mamy rekurencję i przypadek łatwy to gdy macierz ma wymiar jeden i to mamy w ifie.
Dalej w elsie już nie za bardzo wiem co się dzieje, zatem proszę o pomoc.