•ommaire
                                                             • Introduction
                                                             « Objets récursifs
                                                             • Méthodes récursives
                                                               • Divide & Conquer
                                © L. B. Romdhane, Ph.D.        • Principe d'exécution
                                                               • Arbre d'exécution
                                 DSI / FSM / UM / Tunisie
                                                             • Preuve de terminaison




                                                                                  © L. H. Riundbane; FSM.TN




                                                               BJETS RECURSIFS (1)
• John McCarthy (MIT / Stanford)                                II est parfois difficile de définir un objet directement
   • Algolôo ( ancêtre de Pascal, PL/1 et C)                    II est plus simple de définir cet objet en fonction
   • Lisp : structures de données et traitements récursifs      de lui-même
• Implémentation en langage de programmation                    Exemple - chaîne de caractères
   • au début : certains n'implémentait pas ce concept          a) Classique : Une chaîne de caractères est une suite de
     (COBOL, Fortran)                                              caractères
  • actuellement : tous les langages                            b) Récursive : Une chaîne de caractères est soit la chaîne
* Objets (structures de données) récursives                        vide; soit un caractère suivi d'une chaîne de caractère

* Méthodes (procédures et fonctions) récursives

                       L. B.Romdhanc; FSM.TN                                      6 L. B. Romdhane; FSM.TN
OBJETS RECURSIFS (2)                                             -T5MDE&CONQUER(1)
 • Objet récursif: le nombre de composantess (objets) est          0   Diviser pour régner : un p r i n c i p e l n n d . u n r n i . i l p n n r
                                                                       résoudre des problèmes informatiques COmplexei
    illimité ?
                                                                   • Idée- résoudre un problème S(n) de / < / ! / / < • u m Ir
 • La nécessité d'un point d'appui                                   divisant en plusieurs sous-problèmes de même n . i i n i v
        • un objet particulier permettant de limiter le nombre       S(n}, S(n-), ..., S(nk) telque(n,< n); Vs e o m l u n n
          d'objets dans la définition                                les solutions pour obtenir celle de S(n)
                                                                   • La notion de taille dépend de la nature du p r o b l è m e !
 • Objet récursif :                                                       • Tri : le nombre d'éléments à trier
        • soit un objet particulier;                                      • Factoriel : la valeur de l'entier

        • soit une composante + un objet récursif                  • Constitue le principe fondamental de la récursivité


                           > L. B. Runidliane; FSM.TN                                            I L. B. Romdhane; FSM.TN




-T5ÎVÎDE & CONQUER'{2)                                            "tfJVÎDE & CONQÛÏRlIT
 1. Diviser : si la taille du problème est inférieur à un          Algorithme Solve (I)
                                                                   Début
         certain seuil, alors le résoudre directement en allant
                                                                          n<- taille(I)
         chercher parmi un ensemble de cas particuliers sinon             Si (n < seuil) alors solution <- directlySolve(I)
                                                                           Sinon
         le diviser en un ensemble de sous-problèmes
                                                                              « diviser / en It, I 2 , ..., Ik
  2. Régner : Résoudre récursivement les sous-                                • Pour i de i à k faire
                                                                                   S,<-Salvf:(I}
         problèmes selon le même principe                                        Fin Pour
                                                                              • Solution <— combiner^,,..., Sk )
  3. Combiner : les solutions des sous-problèmes pour
                                                                           Fin Si
         constituer la solution du problème original               Fin.
                            i !.. B, Rumdhane; FSM.TN                                           © L. B. Rumiihani-i FSM.TN
 ASI)
'MÉTHODES RECURSÎVES (1)
j Une méthode est dite récursive, si elle fait appel à                   La suite de Fibonacci                                fonction fibo ( In n : entier)
     elle-même                                                                                                                 entier
                                                                            • Un = U^ + Un.z                                 VAR
          Méthode myRecursMethod ( ListeParam )
                                                                            • Ui = i; Uo = o                                     fi, fa, f : entier
            Environment                                                                                                        Début
          Début:                                                                                     , . 1                       Si ((n = o) OU (n=i))
                                                                               directlySolve(n)             :     .............,.,,,.„„_   a!ors f   <_ n
                                                                                                                                     sinon
            myRecursMethod ( ListeParam)                                                                                               fi (— fibo (n -i)
                                                                               1.      Diviser
                                                                                                                                       h <— fibo (n -2)
                                                                               2.      Régner
          Fin.
                                                                                                                                     Fin Si
  « Nécessité d'une condition d'arrêt qui sera vraie à un                      3.     Composer              j"                 retourner (f )
    instant ultérieur de l'exécution                                                                                           Fin.
                           «5 L. M. Ruiiiiilitinc; KSM.TN                                                          L. B. Romdliane; FSM.TN




-METHODES RECURSIVES (3)                                         Algorithme CalcFib
                                                                                                                          RCrjRST7fs4)
                                                                                                                                                            fibo
   • Environnement d'une méthode contient les                    VAR X : entier                                               ? : "valeur indéfinie"
                                                                 Début                                                                                      fz:?
     informations suivantes :                                       X <- fibo (3)                                                                           @ : ligne i
         • variables locales & paramètres de la méthode          Fin.                                                                                       main
                                                                 fonction ilbo( in n : entier) : entier
                                                                                                                                                            x:?
         • variables locales du compilateur                      VAR fl, G, f: entier
                                                                 Début
         • @ de retour dans la méthode appelante; etc.                    1. Si (n = 0)OU(n=l)                                                              fibo
                                                                                                                                                            n :2    fi:?
   • Les appels à une méthode sont stockés dans une pile                        2. ulvrs f <— n
                                                                                                                                                            fi:?
                                                                          3. sîiiun
     d'exécution (frame stack)                                                  4. f 1 <- fibo (n -1)
                                                                                                                                                            @ : ligne i, 4
                                                                                                                                11:3                        fibo
         • Empiler un nouveau environnement par appel récursif                  5. f2 «- fibo (n -2)                                                        n:3    fi;?
                                                                                6. f * - f l + f 2                                                          £2:?   f:?
         • Dépiler si la méthode s'est terminée                              FiiiSi
                                                                          7. retourner (f)                                                                  main
                                                                 Fin.
                            iO L. B, Roruiihane; FSM.TN            AS!)                                 ) L. B. Romilhane; FSM.TN
  AS1>
-^IViETHODES RECURSIVES                                                                         -"-IVTÉTHODES RECURSIVES(6)
 fibo         <dD     fibo         <j     fibo         <j                      fibo        <f    fibo        Cq ^   fibo        <^ u
 n :i fi:?            n : i fi:?          n : i fi: ?                          n : o fi:?        n : o fi;?         n : o fi:?
 fa:? f:?             f z : ? f :i        fa : ? f : i                         fa :? f : ?       fa:? f : o         fa:? f:o
 @ : ligne i          @ : ligne 2         @ : ligne 7                          @ : ligne i       @ : ligne 2        @ : ligne 7
 fibo                 fibo                fibo               fibo         <;   fibo              fibo               fibo                fibo           A zî                          fibo         ç
                                                                                                                                                           J-

 n :a fi: ?           n : 2 fi:?          n :2 fi:?          n : 2 fi: i       n ; 2 fin         n : 2 fi :i        n : 2 fi:i          n : 2 fi:i                                   n:i fi:?
 f a : ? f :?         fa:? f:?            fa : ? f : ?       fa : ? f : ?      fa:? f : ?        h: ? f : ?         f a : ? f :?        fa :o f :i                                   fz : ? f : ?
 @ : ligne 4          @ : ligne 4         @ : ligne 4        @ : ligne 5       @ : ligne 5       @ : ligne g        @ : ligne 5         @ : ligne 6, 7                               @ : ligne i
 fibo                 fibo                fibo               fibo              fibo              fibo
                      11:3 fi:?           n : 3 fi : ?       n : 3 fi : ?      11:3 fi:?
                                                                                                                    fibo                fibo                     fibo           £^   fibo
 n: 3 fi: ?                                                                                      n: 3 fi :?         n : 3 fi:?          n: 3    fi: ?            11:3 fi:i           n:3 fi:i
 f a : ? f :?         £2: ? f :?          fa:? f : ?         fa : ? f : ?      f a : ? f :?      fa : ? f : ?       fa:? f:?            fa :? f :?               fa : ? f : ?        fa : ? f : ?
 @ : ligne 4          @ : ligne 4         @ : ligne 4        (!$ : ligne 4     @ : ligne 4       @ : ligne 4        @ : ligne 4         @ : ligne 4              @ : ligne 5         @ : ligne 5
 main                 main                 main              niai n            main              main               main                main                     main                main
 x:?                  x:?                  x:?               x:?               x: ?              x:?                x:?                 x:?                      x: ?                x: ?
                                i L. B. Roimihanc; FSM.TN                                                                        L. B. Romdliane; FSM.TN




-IViÉTHODES RECURSWËS (7)                                                                                              DE RECURSIVITË (1)
                                                                                                    • On distingue les types de récursivité suivants
                                                                                                    • Linéaire
    fibo              C                                                                               • une méthode s'auto-appelle une seule fois
    n:i      fi:?                                                                                           • factoriel, puissance
    fz:?     f i
                                                                                                    • Binaire
     @ : ligne 2,7
     fibo                    fibo                                                                     • une méthode s'auto-appelle une seule fois
                                            M3     (^
     n: 3    fi : i          n:3     fi: i                                                                  • fibonacci
     fa:? f:?                fa:i    f:a
                                                                                                    • Multiple
     @ : ligne 5             @ : ligne 6, 7
     main                    main              mam    <                                                  • une méthode s'auto-appelle plus que deux fois
     x :?                    x: ?                 x:.



                                    L. B. Romdhane; ESM.TN                                                                              © L. B. Romdhane; FSM.TN
"TYPES DE RECURSIVITE (2)                                                                                                     DE LA RECURSIVITE (1)
             Factoriel (n)                                       Puissance (x, n)                  A       L'exécution d'une méthode récursive peut êtPe
fonction factoriel(n : entier) :                       ~Joncnôn pulssahcefx: réel, n : entier) :              modélisée à l'aide d'un arbre
                                                          réel
   entier                                                 VAR r : r é e l                                          •     un ensemble de nœuds; et de liens (parent / fils)
       VAR f : entier                                  Début                                                       •     et une racine
                                                          ïi (n=o) alors r «— i
Début                                                     i'inon
                                                                   MOD 2.) -o alors
                                                                                                        •         Utilité ?
  si (n=o) alors f f- o
                                                                  *— pul6fiance(Xj n DIV z)
  sinon f <-- n * factoriel (n-i)                                   <— r * r                                 1.        une meilleure compréhension du déroulement
  fin Si                                                                pulsuncefo (n -0 DIV 2)              2.        un outil formel pour analyser le coût d'exécution
retourner (f )                                                         - K *r *r
                                                              fin Si                                                   d'une méthode récursive
Fin.                                                       fin Si
                                                       retourner (r)
                                                        lin.

                        10 L. U. Kuimiliiuic; KSM.1N                                                                                     © L. B. Romdhane; FSM.TN




                                                                                                                              DE LA RECURSIVITE (3)
   A chaque nœud de l'arbre, on représente l'ensemble
   des paramètres de l'appel récursif, la taille du problème,
   etc.
   La racine est constitué du premier appel à la méthode
       Chaque appel récursif est représenté dans un nœud fils
       du nœud où l'appel a été engendré
       Les nœuds terminaux (ou feuilles) n'engendrent aucun
       appel récursif
        • Ils représentent les cas de base (où la taille du problème
          est inférieur au seuil critique)

                                   © L. B. Romdhane; (SM.TN                                                                      C L, B. Romdhime; FSM.TN
 ASD
"ARBRE DE LA REÇURSIVITE (4)                                        ARBRE DE LA RECURSIVITE (5)
• Une fois construit, cet arbre fournit un outil
  mathématique pour analyser le coût d'exécution d'une              • coût: nombre                                             fibo (3) 13]
  méthode récursive                                                   d'opérations d'ajjlftkm &
• Calculer le coût à chaque appel; puis sommer sur tous               d'affectation
  les nœuds de l'arbre                                                 • coût total = 9
                                                                                                                     fibo-U)   j3 j   fibo    (i) j
• coût total est fonction                                           • Quel serait le coût pour
   • du nombre de nœuds (nombre d'appels)                            fibo (n) d'une manière
   • Le coût à chaque nœud (appel)                                    générale ?
                                                                       2 >

                       O !.. H. K   dhane; KSM.TM                                        G L. B. Romdhane; FSM.TN




"DISCUSSION -TERMINAISON
 • Une méthode récursive finit-elle toujours par s'arrêter           L'exactitude d'une méthode récursive est faite
   lorsqu'elle est exécutée sur un jeu de données bien               généralement par induction                     ^ -~ —""•-
   déterminée ?                                                      Soit P(n) une proposition dont on veut démontrer
 » Un problème non-décidable !                                       l'exactitude
 8   Aucune preuve formelle                                           Démontrer que P(n) est vraie Vne W] où 14/estun
 • Généralement, on fait appel au « bon sens »                        ensemble de cas de base connus
    • vérifier que la taille du sous-problème est inférieur à la      Exprimer P(n) en fonction de P(n), ..,, P(nk); où n ( < n
      taille du problème original avant l'appel récursif              Supposer que P(n),..., P(nk); sont vraies; et
    > vérifier les conditions d'exécution avant de lancer l'appel     Démontrer que P(n) est vraie
      récursif


                        O L. B. Rimidhane; VSM.TN                                        © L. B. Roindhane; FSM.TN

Ch2 Algorthmique Avancée - Récursivité

  • 1.
    •ommaire • Introduction « Objets récursifs • Méthodes récursives • Divide & Conquer © L. B. Romdhane, Ph.D. • Principe d'exécution • Arbre d'exécution DSI / FSM / UM / Tunisie • Preuve de terminaison © L. H. Riundbane; FSM.TN BJETS RECURSIFS (1) • John McCarthy (MIT / Stanford) II est parfois difficile de définir un objet directement • Algolôo ( ancêtre de Pascal, PL/1 et C) II est plus simple de définir cet objet en fonction • Lisp : structures de données et traitements récursifs de lui-même • Implémentation en langage de programmation Exemple - chaîne de caractères • au début : certains n'implémentait pas ce concept a) Classique : Une chaîne de caractères est une suite de (COBOL, Fortran) caractères • actuellement : tous les langages b) Récursive : Une chaîne de caractères est soit la chaîne * Objets (structures de données) récursives vide; soit un caractère suivi d'une chaîne de caractère * Méthodes (procédures et fonctions) récursives L. B.Romdhanc; FSM.TN 6 L. B. Romdhane; FSM.TN
  • 2.
    OBJETS RECURSIFS (2) -T5MDE&CONQUER(1) • Objet récursif: le nombre de composantess (objets) est 0 Diviser pour régner : un p r i n c i p e l n n d . u n r n i . i l p n n r résoudre des problèmes informatiques COmplexei illimité ? • Idée- résoudre un problème S(n) de / < / ! / / < • u m Ir • La nécessité d'un point d'appui divisant en plusieurs sous-problèmes de même n . i i n i v • un objet particulier permettant de limiter le nombre S(n}, S(n-), ..., S(nk) telque(n,< n); Vs e o m l u n n d'objets dans la définition les solutions pour obtenir celle de S(n) • La notion de taille dépend de la nature du p r o b l è m e ! • Objet récursif : • Tri : le nombre d'éléments à trier • soit un objet particulier; • Factoriel : la valeur de l'entier • soit une composante + un objet récursif • Constitue le principe fondamental de la récursivité > L. B. Runidliane; FSM.TN I L. B. Romdhane; FSM.TN -T5ÎVÎDE & CONQUER'{2) "tfJVÎDE & CONQÛÏRlIT 1. Diviser : si la taille du problème est inférieur à un Algorithme Solve (I) Début certain seuil, alors le résoudre directement en allant n<- taille(I) chercher parmi un ensemble de cas particuliers sinon Si (n < seuil) alors solution <- directlySolve(I) Sinon le diviser en un ensemble de sous-problèmes « diviser / en It, I 2 , ..., Ik 2. Régner : Résoudre récursivement les sous- • Pour i de i à k faire S,<-Salvf:(I} problèmes selon le même principe Fin Pour • Solution <— combiner^,,..., Sk ) 3. Combiner : les solutions des sous-problèmes pour Fin Si constituer la solution du problème original Fin. i !.. B, Rumdhane; FSM.TN © L. B. Rumiihani-i FSM.TN ASI)
  • 3.
    'MÉTHODES RECURSÎVES (1) jUne méthode est dite récursive, si elle fait appel à La suite de Fibonacci fonction fibo ( In n : entier) elle-même entier • Un = U^ + Un.z VAR Méthode myRecursMethod ( ListeParam ) • Ui = i; Uo = o fi, fa, f : entier Environment Début Début: , . 1 Si ((n = o) OU (n=i)) directlySolve(n) : .............,.,,,.„„_ a!ors f <_ n sinon myRecursMethod ( ListeParam) fi (— fibo (n -i) 1. Diviser h <— fibo (n -2) 2. Régner Fin. Fin Si « Nécessité d'une condition d'arrêt qui sera vraie à un 3. Composer j" retourner (f ) instant ultérieur de l'exécution Fin. «5 L. M. Ruiiiiilitinc; KSM.TN L. B. Romdliane; FSM.TN -METHODES RECURSIVES (3) Algorithme CalcFib RCrjRST7fs4) fibo • Environnement d'une méthode contient les VAR X : entier ? : "valeur indéfinie" Début fz:? informations suivantes : X <- fibo (3) @ : ligne i • variables locales & paramètres de la méthode Fin. main fonction ilbo( in n : entier) : entier x:? • variables locales du compilateur VAR fl, G, f: entier Début • @ de retour dans la méthode appelante; etc. 1. Si (n = 0)OU(n=l) fibo n :2 fi:? • Les appels à une méthode sont stockés dans une pile 2. ulvrs f <— n fi:? 3. sîiiun d'exécution (frame stack) 4. f 1 <- fibo (n -1) @ : ligne i, 4 11:3 fibo • Empiler un nouveau environnement par appel récursif 5. f2 «- fibo (n -2) n:3 fi;? 6. f * - f l + f 2 £2:? f:? • Dépiler si la méthode s'est terminée FiiiSi 7. retourner (f) main Fin. iO L. B, Roruiihane; FSM.TN AS!) ) L. B. Romilhane; FSM.TN AS1>
  • 4.
    -^IViETHODES RECURSIVES -"-IVTÉTHODES RECURSIVES(6) fibo <dD fibo <j fibo <j fibo <f fibo Cq ^ fibo <^ u n :i fi:? n : i fi:? n : i fi: ? n : o fi:? n : o fi;? n : o fi:? fa:? f:? f z : ? f :i fa : ? f : i fa :? f : ? fa:? f : o fa:? f:o @ : ligne i @ : ligne 2 @ : ligne 7 @ : ligne i @ : ligne 2 @ : ligne 7 fibo fibo fibo fibo <; fibo fibo fibo fibo A zî fibo ç J- n :a fi: ? n : 2 fi:? n :2 fi:? n : 2 fi: i n ; 2 fin n : 2 fi :i n : 2 fi:i n : 2 fi:i n:i fi:? f a : ? f :? fa:? f:? fa : ? f : ? fa : ? f : ? fa:? f : ? h: ? f : ? f a : ? f :? fa :o f :i fz : ? f : ? @ : ligne 4 @ : ligne 4 @ : ligne 4 @ : ligne 5 @ : ligne 5 @ : ligne g @ : ligne 5 @ : ligne 6, 7 @ : ligne i fibo fibo fibo fibo fibo fibo 11:3 fi:? n : 3 fi : ? n : 3 fi : ? 11:3 fi:? fibo fibo fibo £^ fibo n: 3 fi: ? n: 3 fi :? n : 3 fi:? n: 3 fi: ? 11:3 fi:i n:3 fi:i f a : ? f :? £2: ? f :? fa:? f : ? fa : ? f : ? f a : ? f :? fa : ? f : ? fa:? f:? fa :? f :? fa : ? f : ? fa : ? f : ? @ : ligne 4 @ : ligne 4 @ : ligne 4 (!$ : ligne 4 @ : ligne 4 @ : ligne 4 @ : ligne 4 @ : ligne 4 @ : ligne 5 @ : ligne 5 main main main niai n main main main main main main x:? x:? x:? x:? x: ? x:? x:? x:? x: ? x: ? i L. B. Roimihanc; FSM.TN L. B. Romdliane; FSM.TN -IViÉTHODES RECURSWËS (7) DE RECURSIVITË (1) • On distingue les types de récursivité suivants • Linéaire fibo C • une méthode s'auto-appelle une seule fois n:i fi:? • factoriel, puissance fz:? f i • Binaire @ : ligne 2,7 fibo fibo • une méthode s'auto-appelle une seule fois M3 (^ n: 3 fi : i n:3 fi: i • fibonacci fa:? f:? fa:i f:a • Multiple @ : ligne 5 @ : ligne 6, 7 main main mam < • une méthode s'auto-appelle plus que deux fois x :? x: ? x:. L. B. Romdhane; ESM.TN © L. B. Romdhane; FSM.TN
  • 5.
    "TYPES DE RECURSIVITE(2) DE LA RECURSIVITE (1) Factoriel (n) Puissance (x, n) A L'exécution d'une méthode récursive peut êtPe fonction factoriel(n : entier) : ~Joncnôn pulssahcefx: réel, n : entier) : modélisée à l'aide d'un arbre réel entier VAR r : r é e l • un ensemble de nœuds; et de liens (parent / fils) VAR f : entier Début • et une racine ïi (n=o) alors r «— i Début i'inon MOD 2.) -o alors • Utilité ? si (n=o) alors f f- o *— pul6fiance(Xj n DIV z) sinon f <-- n * factoriel (n-i) <— r * r 1. une meilleure compréhension du déroulement fin Si pulsuncefo (n -0 DIV 2) 2. un outil formel pour analyser le coût d'exécution retourner (f ) - K *r *r fin Si d'une méthode récursive Fin. fin Si retourner (r) lin. 10 L. U. Kuimiliiuic; KSM.1N © L. B. Romdhane; FSM.TN DE LA RECURSIVITE (3) A chaque nœud de l'arbre, on représente l'ensemble des paramètres de l'appel récursif, la taille du problème, etc. La racine est constitué du premier appel à la méthode Chaque appel récursif est représenté dans un nœud fils du nœud où l'appel a été engendré Les nœuds terminaux (ou feuilles) n'engendrent aucun appel récursif • Ils représentent les cas de base (où la taille du problème est inférieur au seuil critique) © L. B. Romdhane; (SM.TN C L, B. Romdhime; FSM.TN ASD
  • 6.
    "ARBRE DE LAREÇURSIVITE (4) ARBRE DE LA RECURSIVITE (5) • Une fois construit, cet arbre fournit un outil mathématique pour analyser le coût d'exécution d'une • coût: nombre fibo (3) 13] méthode récursive d'opérations d'ajjlftkm & • Calculer le coût à chaque appel; puis sommer sur tous d'affectation les nœuds de l'arbre • coût total = 9 fibo-U) j3 j fibo (i) j • coût total est fonction • Quel serait le coût pour • du nombre de nœuds (nombre d'appels) fibo (n) d'une manière • Le coût à chaque nœud (appel) générale ? 2 > O !.. H. K dhane; KSM.TM G L. B. Romdhane; FSM.TN "DISCUSSION -TERMINAISON • Une méthode récursive finit-elle toujours par s'arrêter L'exactitude d'une méthode récursive est faite lorsqu'elle est exécutée sur un jeu de données bien généralement par induction ^ -~ —""•- déterminée ? Soit P(n) une proposition dont on veut démontrer » Un problème non-décidable ! l'exactitude 8 Aucune preuve formelle Démontrer que P(n) est vraie Vne W] où 14/estun • Généralement, on fait appel au « bon sens » ensemble de cas de base connus • vérifier que la taille du sous-problème est inférieur à la Exprimer P(n) en fonction de P(n), ..,, P(nk); où n ( < n taille du problème original avant l'appel récursif Supposer que P(n),..., P(nk); sont vraies; et > vérifier les conditions d'exécution avant de lancer l'appel Démontrer que P(n) est vraie récursif O L. B. Rimidhane; VSM.TN © L. B. Roindhane; FSM.TN