Table des matières indexe chapitre suivant

Chapitre 14 : la récursivité

Un sous­programme qui contient dans sa partie instruction un appel á lui­même est dit sous­programme 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 sous­bloc 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 sous­programmes 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 sous­programme 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 ;                                     
            |   -----------------------------------------------------
            |   ...                                                   
            ---------------------------------------------------------

Table des matières indexe chapitre suivant