Ragazzi sto impazzendo, non riesco a capire come funziona questa funzione ricorsiva... Qualcuno può gentilmente spiegarmelo?



codice:
void merge_sort(vector<int>& a, int from, int to)
{
   if (from == to) return;
   int mid = (from + to) / 2;
   merge_sort(a, from, mid);
   merge_sort(a, mid + 1, to);
   merge(a, from, mid, to);
}