1	function Contatore(n)
2		{
3			Visualizzo n;
4			if(n>0)
5				Contatore(n-1);
6			Visualizzo n;
7		}
8	Contatore(15);
		
Quando viene eseguito questo codice 
cosa succede nello stack delle chiamate?

Alla riga 8 è invocato Contatore(15), 
quindi è memorizzato nello stack (pila FILO - First Input Last Output)
la riga della chiamata (8). 
Non avendo il corpo principale dello script dati locali 
ma solo dati globali non è memorizzato alcuno stato locale. 
Il controllo passa quindi alla prima riga di Contatore() 
avente una variabile locale n con valore 15. 
Tale valore è mostrato a video, 
quindi alla riga 5 è invocata nuovamente la funzione Contatore(n-1) 
ossia con argomento pari a 14. 
Nello stack è quindi memorizzato 5 (la riga della chiamata) 
e lo stato locale ossia la variabile n con valore 15. 
E' quindi trasferito il controllo alla prima riga di Contatore() 
(una nuova chiamata) avente una variabile locale con valore 14. 
Tale valore è mostrato a video, 
quindi alla riga 5 è invocata nuovamente la funzione Contatore(n-1).
L'esecuzione andrà avanti così, mostrando a video i valori 15, 14, 13, 12, ... 
mentre lo stack si riempie di chiamate.
 
Raggiunto lo 0 la ricorsione termina.

Le varie chiamate che popolano lo stack sono ripristinate 
man mano che terminano le funzioni Contatore() invocate. 
Ciò fino a quando il controllo non ritorna al chiamante 
che ha dato origine alla ricorsione, ossia il corpo principale dello script, 
e la pila delle chiamate ricorsive è vuota.

Molto semplicemente lasceremo eseguire subito tutte le ricorsioni fino a raggiungere lo 0
e l'istruzione Visualizzo n; di riga 3 visualizzera' cio' che viene inserito nello stack.

L'istruzione Visualizzo n; di riga 6 invece iniziera' a stampare dopo che n e' diventato 0. 
Si ripristina la chiamante dallo stack e appare 1, 
si ripristina la chiamante e appare 2 e man mano che si svuota lo stack 
e le variabili locali dei chiamanti sono  ripristinate 
otteniamo valori sempre maggiori fino al massimo utilizzato per dare il via alla ricorsione. 

In altre parole ci basta porre l'istruzione di output 
prima della ricorsione per avere i valori decrescenti 
mam mano che vengono inseriti nello stack
Porre invece l'istruzione di output dopo la ricorsione e 
sfruttare la pila delle chiamate per ottenere 
l'ordine dei risultati dal più piccolo al più grande. 

Il risultato del codice illustrato è il seguente:
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15