Un sousprogramme qui contient dans sa partie instruction un
appel á luimême est dit sousprogramme récursif. Notons que
l'appel récursif est conforme aux règles de visibilité vues au
Chapitre 3 de cette Partie.
En effet, l'invocation se fait dans un sousbloc du bloc dans
lequel la procédure est déclarée.
Exemple
program test (input,res) ;
-------------------------- bloc test -----------
|
| ...
| procedure x (...);
| ---------------------- bloc x --------------
| | ...
| | begin
| |
| | ...
| | x(...) ;
| | ...
| | end;
| --------------------------------------------
| ...
| begin
| ...
| end
------------------------------------------------
Lorsque deux sousprogrammes sont mutuellement récursifs, les règles de visibilité sont normalement impossibles á respecter. L'usage de la directive forward (Partie I, Ch. 6, § 2) permet d'utiliser l'identificateur d'un sousprogramme avant sa déclaration.
Exemple
----------------------- bloc program --------------------
|
| ...
| procedure P1 (x : integer) ; forward ;
| function P2 (y : real) : Boolean ;
| ----------------- bloc P2 ---------------------------
| | ...
| |
| | begin
| | ...
| | P1 (3) ;
| | ...
| | end ;
| -----------------------------------------------------
|
| procedure P1 ;
| ----------------- bloc P1 ---------------------------
| | ...
| | var a : real ; ...
| |
| | begin
| | ...
| | if P2 (a) then ...
| | ...
| | end ;
| -----------------------------------------------------
| ...
---------------------------------------------------------