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 ; | ----------------------------------------------------- | ... ---------------------------------------------------------