{ File: ricorsio.pas }

{ Scopo: primo esempio di procedura ricorsiva }

program EsempioRicorsione;
var
  j : integer;


  procedure Ricorsiva (i: integer);
  begin { Ricorsiva }
    write('Adesso i vale ', i);
    if i = 0 then
       writeln(' - Ho finito')
    else
    begin
      writeln(' - Attivo Ricorsiva(', i-1,')');
      Ricorsiva(i-1);
      writeln('Ricorsiva(', i-1, ') appena terminata - Adesso i vale ', i)
    end
  end; { Ricorsiva }


begin { EsempioRicorsione }
  write('Inserisci un intero non negativo: ');
  readln(j);
  Ricorsiva(j);
  writeln('Ho finito')
end. { EsempioRicorsione }


{ ESEMPIO DI ESECUZIONE:

Inserisci un intero non negativo: 3
Adesso i vale 3 - Attivo Ricorsiva(2)
Adesso i vale 2 - Attivo Ricorsiva(1)
Adesso i vale 1 - Attivo Ricorsiva(0)
Adesso i vale 0 - Ho finito
Ricorsiva(0) appena terminata - Adesso i vale 1
Ricorsiva(1) appena terminata - Adesso i vale 2
Ricorsiva(2) appena terminata - Adesso i vale 3
Ho finito

}