Ciao a tutti.

Mi sono imbattuto ieri in due funzioni ricorsive, di cui non riesco a capirne la differenza (se non a differenza di codice).

La prima funziona è la stampa di un array:

codice:
void stampa(float A[],int dim) {  
   if (dim == 0){
      return;
   } else {
      stampa(A, dim-1);
      cout << A[dim-1] << " ";
   }
}

La seconda invece è la stampa di un array invertendone l'ordine:

codice:
void stampa_contrario(float A[],int dim) {  
   if (dim == 0){
      return;
   } else {
      cout << A[dim-1] << " ";
      stampa_contrario(A, dim-1);
   }
}

C'è qualche buon'anima che mi spiega come funzionano questa funzioni? Nel senso, perché nella funzione stampa viene prima richiamata per ricorsione la medesima funzione e poi viene fatto un cout, mentra nella funzione stampa_contrario viene appunto invertito l'ordine?

Una spiegazione a livello visivo di come agiscono queste due funzioni penso che mi risolverebbe molto le cose.

Grazie mille a tutti quanti risponderanno.

Stefano