SlideShare une entreprise Scribd logo
•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

Contenu connexe

Tendances

Chapitre2 theorie-elementaire-de-la-rdm
Chapitre2 theorie-elementaire-de-la-rdmChapitre2 theorie-elementaire-de-la-rdm
Chapitre2 theorie-elementaire-de-la-rdmmoyo zizou
 
traitement de signal cours
traitement de signal cours traitement de signal cours
traitement de signal cours
sarah Benmerzouk
 
GEII - Ma3 - Représentations de Fourier et convolution
GEII - Ma3 - Représentations de Fourier et convolutionGEII - Ma3 - Représentations de Fourier et convolution
GEII - Ma3 - Représentations de Fourier et convolution
Frédéric Morain-Nicolier
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétudelotfibenromdhane
 
Algorithme d'approximation
Algorithme d'approximationAlgorithme d'approximation
Algorithme d'approximationMed Lassoued
 
Étude des fonctions à plusieurs variables (GEII MA32)
Étude des fonctions à plusieurs variables (GEII MA32)Étude des fonctions à plusieurs variables (GEII MA32)
Étude des fonctions à plusieurs variables (GEII MA32)
Frédéric Morain-Nicolier
 
GEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et sériesGEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et séries
Frédéric Morain-Nicolier
 
GEII - OL3 : Signaux et systèmes numériques
GEII - OL3 : Signaux et systèmes numériquesGEII - OL3 : Signaux et systèmes numériques
GEII - OL3 : Signaux et systèmes numériques
Frédéric Morain-Nicolier
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
Yassine Anddam
 
Clustering efficace avec les divergences de bregman
Clustering efficace avec les divergences de bregmanClustering efficace avec les divergences de bregman
Clustering efficace avec les divergences de bregman
Medalith Estrada
 
Recherche à voisinage variable
Recherche à voisinage variableRecherche à voisinage variable
Recherche à voisinage variable
Mohammed Mansouri
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabouAchraf Manaa
 
Cours series fourier
Cours series fourierCours series fourier
Cours series fourierMehdi Maroun
 
Séries de Fourier
Séries de FourierSéries de Fourier
Séries de Fourier
Frederic Jacobs
 
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
RichardTerrat1
 
5 limite continuite
5 limite continuite5 limite continuite
5 limite continuite
jamal yasser
 
4e ds2-2012-2013
4e ds2-2012-20134e ds2-2012-2013

Tendances (20)

Chapitre2 theorie-elementaire-de-la-rdm
Chapitre2 theorie-elementaire-de-la-rdmChapitre2 theorie-elementaire-de-la-rdm
Chapitre2 theorie-elementaire-de-la-rdm
 
traitement de signal cours
traitement de signal cours traitement de signal cours
traitement de signal cours
 
GEII - Ma3 - Représentations de Fourier et convolution
GEII - Ma3 - Représentations de Fourier et convolutionGEII - Ma3 - Représentations de Fourier et convolution
GEII - Ma3 - Représentations de Fourier et convolution
 
Ch7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-CopmlétudeCh7 algorithmes NP-Copmlétude
Ch7 algorithmes NP-Copmlétude
 
Algorithme d'approximation
Algorithme d'approximationAlgorithme d'approximation
Algorithme d'approximation
 
Étude des fonctions à plusieurs variables (GEII MA32)
Étude des fonctions à plusieurs variables (GEII MA32)Étude des fonctions à plusieurs variables (GEII MA32)
Étude des fonctions à plusieurs variables (GEII MA32)
 
GEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et sériesGEII - Ma3 - Suites et séries
GEII - Ma3 - Suites et séries
 
GEII - OL3 : Signaux et systèmes numériques
GEII - OL3 : Signaux et systèmes numériquesGEII - OL3 : Signaux et systèmes numériques
GEII - OL3 : Signaux et systèmes numériques
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
Clustering efficace avec les divergences de bregman
Clustering efficace avec les divergences de bregmanClustering efficace avec les divergences de bregman
Clustering efficace avec les divergences de bregman
 
Recherche à voisinage variable
Recherche à voisinage variableRecherche à voisinage variable
Recherche à voisinage variable
 
Chapitre 3 la recherche tabou
Chapitre 3 la recherche tabouChapitre 3 la recherche tabou
Chapitre 3 la recherche tabou
 
Cours series fourier
Cours series fourierCours series fourier
Cours series fourier
 
Oc1 2013
Oc1 2013Oc1 2013
Oc1 2013
 
Séries de Fourier
Séries de FourierSéries de Fourier
Séries de Fourier
 
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
Algorithmes récursifs : une introduction pragmatique pour un enseignement au ...
 
Cours 1
Cours 1Cours 1
Cours 1
 
Dc2 3eme math
Dc2 3eme mathDc2 3eme math
Dc2 3eme math
 
5 limite continuite
5 limite continuite5 limite continuite
5 limite continuite
 
4e ds2-2012-2013
4e ds2-2012-20134e ds2-2012-2013
4e ds2-2012-2013
 

En vedette

Ch4 Algorthmique Avancée - Analyse & complexité des Algorithmes
Ch4 Algorthmique Avancée - Analyse & complexité des AlgorithmesCh4 Algorthmique Avancée - Analyse & complexité des Algorithmes
Ch4 Algorthmique Avancée - Analyse & complexité des Algorithmeslotfibenromdhane
 
Functional programming in java
Functional programming in javaFunctional programming in java
Functional programming in java
John Ferguson Smart Limited
 
Cats
CatsCats
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
Talha Ocakçı
 
Functional Programming in JAVA 8
Functional Programming in JAVA 8Functional Programming in JAVA 8
Functional Programming in JAVA 8
Ignasi Marimon-Clos i Sunyol
 
Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava Comparison
José Paumard
 
Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete  Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete
Adnan abid
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
NewCircle Training
 
Ch5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de TriCh5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de Trilotfibenromdhane
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
Premanand Chandrasekaran
 
Notifications
NotificationsNotifications
Notifications
Youssef ELBOUZIANI
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
José Paumard
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Baselotfibenromdhane
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
José Paumard
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
LivePerson
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
José Paumard
 
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautésAlphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server Faces
Alphorm
 
Alphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certificationAlphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certification
Alphorm
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
Alphorm
 

En vedette (20)

Ch4 Algorthmique Avancée - Analyse & complexité des Algorithmes
Ch4 Algorthmique Avancée - Analyse & complexité des AlgorithmesCh4 Algorthmique Avancée - Analyse & complexité des Algorithmes
Ch4 Algorthmique Avancée - Analyse & complexité des Algorithmes
 
Functional programming in java
Functional programming in javaFunctional programming in java
Functional programming in java
 
Cats
CatsCats
Cats
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Functional Programming in JAVA 8
Functional Programming in JAVA 8Functional Programming in JAVA 8
Functional Programming in JAVA 8
 
Java 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava ComparisonJava 8 Stream API and RxJava Comparison
Java 8 Stream API and RxJava Comparison
 
Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete  Database structure Structures Link list and trees and Recurison complete
Database structure Structures Link list and trees and Recurison complete
 
Java 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & StreamsJava 8 Lambda Expressions & Streams
Java 8 Lambda Expressions & Streams
 
Ch5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de TriCh5 Algorthmique Avancée - Algorithme de Tri
Ch5 Algorthmique Avancée - Algorithme de Tri
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
 
Notifications
NotificationsNotifications
Notifications
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Ch1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de BaseCh1 Algorthmique Avancée - Rappel & Notions de Base
Ch1 Algorthmique Avancée - Rappel & Notions de Base
 
JDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne TourJDK 8, lambdas, streams, collectors - Bretagne Tour
JDK 8, lambdas, streams, collectors - Bretagne Tour
 
Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Java 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelizationJava 8, Streams & Collectors, patterns, performances and parallelization
Java 8, Streams & Collectors, patterns, performances and parallelization
 
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautésAlphorm.com Formation Autodesk Revit 2018 : Les nouveautés
Alphorm.com Formation Autodesk Revit 2018 : Les nouveautés
 
Alphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server FacesAlphorm.com Formation Java Server Faces
Alphorm.com Formation Java Server Faces
 
Alphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certificationAlphorm.com Formation CND 2/2: Réussir la certification
Alphorm.com Formation CND 2/2: Réussir la certification
 
Alphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautésAlphorm.com Java 8: les nouveautés
Alphorm.com Java 8: les nouveautés
 

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) 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>
  • 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 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