La parte difficile da comprendere di questo tipo di ricorsione è che ci sono molte variabili differenti coinvolte, tutte chiamate "num" .
Ogni volta che chiami una funzione, viene creata una nuova copia di tutte in quella funzione ("allocata"). (Il nome formale per l'area in cui ciò accade è "stack frame".)
La definizione di variabili locali include parametri e il meccanismo funziona anche quando la funzione chiamante e la funzione chiamata hanno la stessa definizione di funzione. Combinati, questi due meccanismi generano una cascata di variabili con valori diversi esistenti contemporaneamente (ma solo una nell'invocazione attiva attualmente).
Un buon strumento per capire questo è un debugger con uno stack frame viewer che consente di espandere le variabili locali in tutti i frame attualmente esistenti, non solo quello più in alto. Questo ti permette di verificare che sì, in effetti c'è un num
con valore 1 e un diverso num
con valore 2 allo stesso tempo.