Procedura drukuj(n) jest przykładem rekurencji liniowej: wywołuje samą siebie z argumentem n-1. Kluczowe są dwa elementy: warunek stopu oraz kolejność instrukcji w bloku.
Najpierw sprawdzany jest warunek n>0. Jeśli jest spełniony, wykonywany jest blok begin...end. W tym bloku kolejno dzieją się dwie rzeczy:
- writeln(n) – wypisuje bieżącą wartość i przechodzi do nowej linii,
- drukuj(n-1) – wywołuje procedurę ponownie z mniejszym argumentem.
Dla wywołania drukuj(3) przebieg jest deterministyczny: wypisuje 3, potem wywołuje drukuj(2), które wypisuje 2 i wywołuje drukuj(1), które wypisuje 1 i wywołuje drukuj(0). Gdy n=0, warunek n>0 jest fałszywy, więc nie wykonuje się ani writeln, ani kolejne wywołanie – to kończy rekurencję.
Dlatego poprawny wynik to 3, 2, 1, każda liczba w osobnej linii. Odpowiedź z kolejnością rosnącą (1, 2, 3) byłaby prawdziwa, gdyby writeln znajdowało się po wywołaniu rekurencyjnym (czyli wypisywanie następowałoby podczas "powrotu" ze stosu). Odpowiedzi "tylko 3" oraz "tylko 0" pomijają fakt, że rekurencja schodzi przez 2 i 1, a dla 0 blok nie wykona się w ogóle.