SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e




                                                  R´cursivit´
                                                   e        e
                                               I3 - Algorithmique


                                                Nicolas Delestre




                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     1 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    Plan


     1    Introduction

     2    Comment ´crire un algorithme r´cursif ?
                  e                     e

     3    Quelques exemples
            Les tours de Hano¨ı
            Remplir une zone graphique
            ´
            Evaluation d’une expression arithm´tique
                                              e

     4    Conclusion


                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     2 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    Introduction



     D´finition
       e
     Une entit´ est r´cursive lorsqu’on
                e      e
     l’utilise pour la d´finir
                         e

                                                                     Drawing Hands, Escher (1948)




                                                              http://www.russie.net/russie/art_
                                                                       matriochka.htm
                                                                                                       as
                                                                                               Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                             3 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Exemples 1 / 2

     Factorielle
          0! = 1! = 1
          n! = n(n − 1)!

     Suite de fibonacci
     
      F (0) = 0
        F (1) = 1
        F (n) = F (n − 1) + F (n − 2), n > 1
     


     Poup´e russe
         e
     Une poup´e russe est
              e
             une poup´e “pleine”
                     e
             une poup´e “vide” contenant une poup´e russe
                     e                           e
                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     4 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Exemples 2 / 2



     Factorielle
     fonction fact (n : Naturel) : Naturel
     debut
        si n=0 ou n=1 alors
            retourner 1
        sinon
            retourner n*fact(n-1)
        finsi
     fin



                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     5 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    R´cursivit´ terminale
     e        e

     D´finition
       e
     L’appel r´cursif est la derni`re instruction et elle est isol´e
              e                   e                               e

     plus(a,b)
     fonction plus (a,b : Naturel) : natuel
     debut
        si b=0 alors
            retourner a
        sinon
            retourner plus(a+1,b-1)
        finsi
     fin

     plus(4,2)=plus(5,1)=plus(6,0)=6
                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     6 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    R´cursivit´ non terminale
     e        e
     D´finition
       e
     L’appel r´cursif n’est pas la derni`re instruction et/ou elle n’est pas isol´e
               e                        e                                        e
     (fait partie d’une expression)

     plus(a,b)
     fonction plus (a,b : Naturel) : natuel
     debut
        si b=0 alors
            retourner a
        sinon
            retourner 1+plus(a,b-1)
        finsi
     fin

     plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     7 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    M´thode
     e



     Pour ´crire un algorithme r´cursif il faut analyser le probl`me pour :
          e                     e                                e
             identifer le ou les cas particuliers
             identifier le cas g´n´ral qui effectue la r´cursion
                               e e                    e

     Surtout
     Lorsque l’on ´crit un algorithme r´cursif, lors de l’appel r´cursif, on se
                  e                     e                        e
     positionne en tant qu’utilisateur de l’algorithme : on consid`re donc que
                                                                   e
     le probl`me est r´solu
             e        e



                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     8 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Les tours de Hano¨ 1 / 4
                       ı

     Pr´sentation
       e




     Les tours de hano¨ est un jeu solitaire dont l’objectif est de d´placer les
                        ı                                            e
     disques qui se trouvent sur une tour (par exemple ici la premi`re tour,
                                                                     e
     celle la plus ` gauche) vers une autre tour (par exemple la derni`re, celle
                   a                                                    e
     la plus ` droite) en suivant les r`gles suivantes :
              a                        e
             on ne peut d´placer que le disque se trouvant au sommet d’une tour ;
                         e
             on ne peut d´placer qu’un seul disque ` la fois ;
                         e                         a
             un disque ne peut pas ˆtre pos´ sur un disque plus petit.
                                   e       e
                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                     9 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Les tours de Hano¨ 2 / 4
                       ı




     Op´rations disponibles
       e
     proc´dure d´pilerTour ( E/S t : TourDeHanoi , S d : Disque )
         e      e
     proc´dure empilerTour ( E/S t : TourDeHanoi , E d : Disque )
         e


     Objectif
     proc´dure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel ,
         e
     E/S source, destination, intermediaire : TourDeHanoi )




                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  10 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Les tours de Hano¨ 3 / 4
                       ı


     Analyse du probl`me
                     e

                                                       2

                                                1                     3




                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  11 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Les tours de Hano¨ 4 / 4
                       ı


     Solution
     proc´dure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel , E/S source,
          e
     destination, intermediaire : TourDeHanoi )
         D´claration d : Disque
           e
     debut
         si nbDisquesADeplacer>0 alors
             resoudreToursDeHanoi(nbDisquesADeplacer-1, source, intermediaire,
             destination)
             depiler(source,d)
             empiler(destination,d)
             resoudreToursDeHanoi(nbDisquesADeplacer-1, intermediaire, destination,
             source)
         finsi
     fin

                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  12 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Remplir une zone graphique 1 / 5

     Pr´sentation
       e
         Un ´cran graphique est un quadrillage
             e
             Chaque intersection de ce quadrillage est un pixel qui peut ˆtre
                                                                         e
             coloris´
                    e




     Op´rations disponibles
       e
             proc´dure fixerCouleurPixel ( E/S e : Ecran , E x,y : Naturel , c : Couleur)
                 e
             fonction obtenirCouleurPixel (e : Ecran,x,y : Naturel) : Couleur                  as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  13 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Remplir une zone graphique 2 / 5


     Objectif
         Proposer le corps de la proc´dure suivante qui permet de remplir
                                     e
         une zone
                     proc´dure remplir ( E/S e : Ecran , E x,y : Naturel , ancienneCouleur,
                         e
                     nouvelleCouleur : Couleur)




                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  14 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Remplir une zone graphique 3 / 5



     Analyse du probl`me
                     e
         Remplir une zone consiste ` changer la couleur de certains pixels en
                                   a
         commen¸ant par celui qui est donn´ :
                 c                        e
                     Si le pixel de coordonn´e (x, y ) est d’une couleur diff´rente de
                                            e                               e
                     ancienneCouleur
                          Ne rien faire
                     Si le pixel de coordonn´e (x, y ) est de la mˆme couleur que
                                            e                     e
                     ancienneCouleur
                          Changer la couleur de ce pixel
                          Tenter de changer la couleur (remplir) des points qui se trouvent
                          autour



                                                                                                as
                                                                                        Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                   15 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Remplir une zone graphique 4 / 5
     Solution
     proc´dure remplir ( E/S e : Ecran , E x,y : Naturel , ancienneCouleur,
          e
     nouvelleCouleur : Couleur)
     debut
        si obtenirCouleurPixel(e,x,y)=ancienneCouleur alors
            fixerCouleurPixel(e,x,y,nouvelleCouleur)
            remplir(e,x,y-1,ancienneCouleur,nouvelleCouleur)
            remplir(e,x,y+1,ancienneCouleur,nouvelleCouleur)
            remplir(e,x-1,y,ancienneCouleur,nouvelleCouleur)
            remplir(e,x+1,y,ancienneCouleur,nouvelleCouleur)
        finsi
     fin

     Note
     On pourrait am´liorer l’algorithme en v´rifiant qu’on ne “sort” pas de
                   e                        e
     l’´cran
       e
                                                                         as            Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  16 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

      Remplir une zone graphique 5 / 5

     Exemple d’ordre de changements de couleur des pixels
     On consid`re que le (0,0) est en haut ` gauche :
              e                            a




                                                           2
                                                         9 1 7
                                                         8 3 6
                                                           4 5



                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  17 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e
      ´
      Evaluation d’une expression arithm´tique 1 / 5
                                        e


     Pr´sentation
       e
         Il y a plusieurs fa¸on de noter une expression arithm´tique
                            c                                 e
                     Infixe : 2*(3+5)
                     Pr´fixe (ou notation polonaise) : * 2 + 3 5
                       e
                     Postfixe (ou notation polonaise invers´e) : 3 5 + 2 *
                                                           e
             En s’inspirant de la notation pr´fixe on peut repr´senter une
                                             e                 e
             expression aritm´tique ` l’aide d’un tableau tel que la i`me case
                             e      a                                 e
             peut contenir :
                     un nombre
                     un op´rateur et dans ce cas les op´randes sont ` la position 2i et
                           e                           e            a
                     2i + 1

                                            *    2     +              3     5

                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  18 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e
      ´
      Evaluation d’une expression arithm´tique 2 / 5
                                        e



     Objectif
         En supposant que l’on ait :
                     Type Expression = Tableau[1..MAX] de Terme
                     Type Operateur = {addition,soustraction,multiplication,division}
                     fonction estUneOperation (t : Terme) : Booleen
                     fonction obtenirOperation (t : Terme) : Operateur
                     fonction obtenirNombre (t : Terme) : Reel
             Donner le corps de la fonction suivante qui calcule la valeur d’une
             expression que l’on sait correctement form´e :
                                                       e
                     fonction evaluer (e : Expression) : Reel



                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  19 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e
      ´
      Evaluation d’une expression arithm´tique 3 / 5
                                        e


     Analyse du probl`me
                     e
         Une expression arithm´tique est :
                              e
                     soit un nombre,
                     soit une op´ration compos´e d’un op´rateur et de deux op´randes qui
                                e              e        e                    e
                     sont des expressions arithm´tiques
                                                 e
             ´
             Evaluer une expression arithm´tique :
                                          e
                     Si c’est un nombre, sa valeur est la valeur de ce nombre
                     Si c’est une op´ration, sa valeur est le calcul de cette op´ration en
                                    e                                           e
                     ´valuant ses deux op´randes
                     e                     e
             ´
             Evaluer une expression arithm´tique revient donc ` ´valuer le
                                          e                   ae
             contenu de la premi`re case du tableau
                                e


                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  20 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e
      ´
      Evaluation d’une expression arithm´tique 4 / 5
                                        e




     Solution
     fonction evaluer (e : Expression) : Reel
     debut
        retourner evaluerRecursivement(e,1)
     fin




                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  21 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e
      ´
      Evaluation d’une expression arithm´tique 5 / 5
                                        e

     Solution
     fonction evaluerRecursivement (e : Expression, indice : Naturel) : Reel
        D´claration v1,v2 : Reel
          e
     debut
        si non estUneOperation(e[indice]) alors
            retourner obtenirNombre(e[indice])
        sinon
            v1 ← evaluerRecursivement(e,2*indice)
            v2 ← evaluerRecursivement(e,2*indice+1)
            cas o` obtenirOperation(e[indice]) vaut
                 u
                 addition : retourner v1+v2
                 soustraction : retourner v1-v2
                 multiplication : retourner v1*v2
                 division : retourner v1/v2
            fincas
        finsi
     fin
                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  22 / 23
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion
                        e                     e

    Conclusion. . .


     En conclusion
         Les algorithmes r´cursifs sont simples (c’est simplement une autre
                          e
         fa¸on de penser)
           c
             Les algortihmes r´cursifs permettent de r´soudre des probl`mes
                               e                      e                e
             complexes
             Il existe deux types de r´cursivit´s :
                                      e        e
                     terminale, qui algorithmiquement peuvent ˆtre transform´e en
                                                              e             e
                     algorithme non r´cursif
                                      e
                     non terminale
             Les algorithmes r´cursifs sont le plus souvent plus gourmands en
                              e
             ressource que leurs ´quivalents it´ratifs
                                 e             e

                                                                                               as
                                                                                       Architecture des Systèmes d’Information




R´cursivit´ - v1.2
 e        e                                                                                                  23 / 23

Mais conteúdo relacionado

Destaque

MaestríA Diversidad 4º Rousseau Educ. Infantil
MaestríA Diversidad 4º Rousseau Educ. InfantilMaestríA Diversidad 4º Rousseau Educ. Infantil
MaestríA Diversidad 4º Rousseau Educ. Infantil
Adalberto
 
Docencia 3 GráFicas Investigacion
Docencia 3 GráFicas InvestigacionDocencia 3 GráFicas Investigacion
Docencia 3 GráFicas Investigacion
Adalberto
 
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
Adalberto
 
MaestríA CurríCulum Historia Del CurríCulum
MaestríA  CurríCulum Historia Del CurríCulumMaestríA  CurríCulum Historia Del CurríCulum
MaestríA CurríCulum Historia Del CurríCulum
Adalberto
 
Etica de la profesiòn docente
Etica de la profesiòn docenteEtica de la profesiòn docente
Etica de la profesiòn docente
Adalberto
 
Maestria En Docencia Universitaria
Maestria En Docencia UniversitariaMaestria En Docencia Universitaria
Maestria En Docencia Universitaria
Adalberto
 
Obras Néstor Burgos Artista Plástico
Obras Néstor Burgos Artista Plástico Obras Néstor Burgos Artista Plástico
Obras Néstor Burgos Artista Plástico
PUPOVISION
 
MaestríA Diversidad 2 DidáCtica Trabajo
MaestríA Diversidad 2  DidáCtica TrabajoMaestríA Diversidad 2  DidáCtica Trabajo
MaestríA Diversidad 2 DidáCtica Trabajo
Adalberto
 
Julio Actividad Integradora 6ª
Julio Actividad Integradora 6ªJulio Actividad Integradora 6ª
Julio Actividad Integradora 6ª
Adalberto
 

Destaque (20)

Céline Guillot. Approche complexe de l'urbanisme. Nouveaux outils.
Céline Guillot. Approche complexe de l'urbanisme. Nouveaux outils.Céline Guillot. Approche complexe de l'urbanisme. Nouveaux outils.
Céline Guillot. Approche complexe de l'urbanisme. Nouveaux outils.
 
MaestríA Diversidad 4º Rousseau Educ. Infantil
MaestríA Diversidad 4º Rousseau Educ. InfantilMaestríA Diversidad 4º Rousseau Educ. Infantil
MaestríA Diversidad 4º Rousseau Educ. Infantil
 
Realidad aumentada
Realidad aumentada Realidad aumentada
Realidad aumentada
 
2013 12-g9plus-nouveaux eldorados
2013 12-g9plus-nouveaux eldorados2013 12-g9plus-nouveaux eldorados
2013 12-g9plus-nouveaux eldorados
 
Android smartphones & tablettes : application mobile ou native ?
Android smartphones & tablettes : application mobile ou native ?Android smartphones & tablettes : application mobile ou native ?
Android smartphones & tablettes : application mobile ou native ?
 
Sous le chapiteau
Sous le chapiteauSous le chapiteau
Sous le chapiteau
 
Docencia 3 GráFicas Investigacion
Docencia 3 GráFicas InvestigacionDocencia 3 GráFicas Investigacion
Docencia 3 GráFicas Investigacion
 
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
Einvestigacionpensamientomatematicoinfantil 090607001835 Phpapp01
 
MaestríA CurríCulum Historia Del CurríCulum
MaestríA  CurríCulum Historia Del CurríCulumMaestríA  CurríCulum Historia Del CurríCulum
MaestríA CurríCulum Historia Del CurríCulum
 
Etica de la profesiòn docente
Etica de la profesiòn docenteEtica de la profesiòn docente
Etica de la profesiòn docente
 
Chiffres clés
Chiffres clésChiffres clés
Chiffres clés
 
1966 mitchell eddy - la société anonyme
1966   mitchell eddy - la société anonyme1966   mitchell eddy - la société anonyme
1966 mitchell eddy - la société anonyme
 
Nerici
NericiNerici
Nerici
 
Despiertos Y Sobrios
Despiertos Y SobriosDespiertos Y Sobrios
Despiertos Y Sobrios
 
SBEE, A l'heure des grandes réformes
SBEE, A l'heure des grandes réformesSBEE, A l'heure des grandes réformes
SBEE, A l'heure des grandes réformes
 
Maestria En Docencia Universitaria
Maestria En Docencia UniversitariaMaestria En Docencia Universitaria
Maestria En Docencia Universitaria
 
Obras Néstor Burgos Artista Plástico
Obras Néstor Burgos Artista Plástico Obras Néstor Burgos Artista Plástico
Obras Néstor Burgos Artista Plástico
 
MaestríA Diversidad 2 DidáCtica Trabajo
MaestríA Diversidad 2  DidáCtica TrabajoMaestríA Diversidad 2  DidáCtica Trabajo
MaestríA Diversidad 2 DidáCtica Trabajo
 
Julio Actividad Integradora 6ª
Julio Actividad Integradora 6ªJulio Actividad Integradora 6ª
Julio Actividad Integradora 6ª
 
Accions del Govern la Generalitat (n.2)
Accions del Govern la Generalitat (n.2)Accions del Govern la Generalitat (n.2)
Accions del Govern la Generalitat (n.2)
 

Recursivite

  • 1. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e R´cursivit´ e e I3 - Algorithmique Nicolas Delestre as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 1 / 23
  • 2. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Plan 1 Introduction 2 Comment ´crire un algorithme r´cursif ? e e 3 Quelques exemples Les tours de Hano¨ı Remplir une zone graphique ´ Evaluation d’une expression arithm´tique e 4 Conclusion as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 2 / 23
  • 3. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Introduction D´finition e Une entit´ est r´cursive lorsqu’on e e l’utilise pour la d´finir e Drawing Hands, Escher (1948) http://www.russie.net/russie/art_ matriochka.htm as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 3 / 23
  • 4. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Exemples 1 / 2 Factorielle 0! = 1! = 1 n! = n(n − 1)! Suite de fibonacci   F (0) = 0 F (1) = 1 F (n) = F (n − 1) + F (n − 2), n > 1  Poup´e russe e Une poup´e russe est e une poup´e “pleine” e une poup´e “vide” contenant une poup´e russe e e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 4 / 23
  • 5. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Exemples 2 / 2 Factorielle fonction fact (n : Naturel) : Naturel debut si n=0 ou n=1 alors retourner 1 sinon retourner n*fact(n-1) finsi fin as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 5 / 23
  • 6. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e R´cursivit´ terminale e e D´finition e L’appel r´cursif est la derni`re instruction et elle est isol´e e e e plus(a,b) fonction plus (a,b : Naturel) : natuel debut si b=0 alors retourner a sinon retourner plus(a+1,b-1) finsi fin plus(4,2)=plus(5,1)=plus(6,0)=6 as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 6 / 23
  • 7. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e R´cursivit´ non terminale e e D´finition e L’appel r´cursif n’est pas la derni`re instruction et/ou elle n’est pas isol´e e e e (fait partie d’une expression) plus(a,b) fonction plus (a,b : Naturel) : natuel debut si b=0 alors retourner a sinon retourner 1+plus(a,b-1) finsi fin plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6 as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 7 / 23
  • 8. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e M´thode e Pour ´crire un algorithme r´cursif il faut analyser le probl`me pour : e e e identifer le ou les cas particuliers identifier le cas g´n´ral qui effectue la r´cursion e e e Surtout Lorsque l’on ´crit un algorithme r´cursif, lors de l’appel r´cursif, on se e e e positionne en tant qu’utilisateur de l’algorithme : on consid`re donc que e le probl`me est r´solu e e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 8 / 23
  • 9. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Les tours de Hano¨ 1 / 4 ı Pr´sentation e Les tours de hano¨ est un jeu solitaire dont l’objectif est de d´placer les ı e disques qui se trouvent sur une tour (par exemple ici la premi`re tour, e celle la plus ` gauche) vers une autre tour (par exemple la derni`re, celle a e la plus ` droite) en suivant les r`gles suivantes : a e on ne peut d´placer que le disque se trouvant au sommet d’une tour ; e on ne peut d´placer qu’un seul disque ` la fois ; e a un disque ne peut pas ˆtre pos´ sur un disque plus petit. e e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 9 / 23
  • 10. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Les tours de Hano¨ 2 / 4 ı Op´rations disponibles e proc´dure d´pilerTour ( E/S t : TourDeHanoi , S d : Disque ) e e proc´dure empilerTour ( E/S t : TourDeHanoi , E d : Disque ) e Objectif proc´dure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel , e E/S source, destination, intermediaire : TourDeHanoi ) as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 10 / 23
  • 11. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Les tours de Hano¨ 3 / 4 ı Analyse du probl`me e 2 1 3 as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 11 / 23
  • 12. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Les tours de Hano¨ 4 / 4 ı Solution proc´dure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel , E/S source, e destination, intermediaire : TourDeHanoi ) D´claration d : Disque e debut si nbDisquesADeplacer>0 alors resoudreToursDeHanoi(nbDisquesADeplacer-1, source, intermediaire, destination) depiler(source,d) empiler(destination,d) resoudreToursDeHanoi(nbDisquesADeplacer-1, intermediaire, destination, source) finsi fin as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 12 / 23
  • 13. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Remplir une zone graphique 1 / 5 Pr´sentation e Un ´cran graphique est un quadrillage e Chaque intersection de ce quadrillage est un pixel qui peut ˆtre e coloris´ e Op´rations disponibles e proc´dure fixerCouleurPixel ( E/S e : Ecran , E x,y : Naturel , c : Couleur) e fonction obtenirCouleurPixel (e : Ecran,x,y : Naturel) : Couleur as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 13 / 23
  • 14. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Remplir une zone graphique 2 / 5 Objectif Proposer le corps de la proc´dure suivante qui permet de remplir e une zone proc´dure remplir ( E/S e : Ecran , E x,y : Naturel , ancienneCouleur, e nouvelleCouleur : Couleur) as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 14 / 23
  • 15. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Remplir une zone graphique 3 / 5 Analyse du probl`me e Remplir une zone consiste ` changer la couleur de certains pixels en a commen¸ant par celui qui est donn´ : c e Si le pixel de coordonn´e (x, y ) est d’une couleur diff´rente de e e ancienneCouleur Ne rien faire Si le pixel de coordonn´e (x, y ) est de la mˆme couleur que e e ancienneCouleur Changer la couleur de ce pixel Tenter de changer la couleur (remplir) des points qui se trouvent autour as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 15 / 23
  • 16. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Remplir une zone graphique 4 / 5 Solution proc´dure remplir ( E/S e : Ecran , E x,y : Naturel , ancienneCouleur, e nouvelleCouleur : Couleur) debut si obtenirCouleurPixel(e,x,y)=ancienneCouleur alors fixerCouleurPixel(e,x,y,nouvelleCouleur) remplir(e,x,y-1,ancienneCouleur,nouvelleCouleur) remplir(e,x,y+1,ancienneCouleur,nouvelleCouleur) remplir(e,x-1,y,ancienneCouleur,nouvelleCouleur) remplir(e,x+1,y,ancienneCouleur,nouvelleCouleur) finsi fin Note On pourrait am´liorer l’algorithme en v´rifiant qu’on ne “sort” pas de e e l’´cran e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 16 / 23
  • 17. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Remplir une zone graphique 5 / 5 Exemple d’ordre de changements de couleur des pixels On consid`re que le (0,0) est en haut ` gauche : e a 2 9 1 7 8 3 6 4 5 as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 17 / 23
  • 18. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e ´ Evaluation d’une expression arithm´tique 1 / 5 e Pr´sentation e Il y a plusieurs fa¸on de noter une expression arithm´tique c e Infixe : 2*(3+5) Pr´fixe (ou notation polonaise) : * 2 + 3 5 e Postfixe (ou notation polonaise invers´e) : 3 5 + 2 * e En s’inspirant de la notation pr´fixe on peut repr´senter une e e expression aritm´tique ` l’aide d’un tableau tel que la i`me case e a e peut contenir : un nombre un op´rateur et dans ce cas les op´randes sont ` la position 2i et e e a 2i + 1 * 2 + 3 5 as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 18 / 23
  • 19. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e ´ Evaluation d’une expression arithm´tique 2 / 5 e Objectif En supposant que l’on ait : Type Expression = Tableau[1..MAX] de Terme Type Operateur = {addition,soustraction,multiplication,division} fonction estUneOperation (t : Terme) : Booleen fonction obtenirOperation (t : Terme) : Operateur fonction obtenirNombre (t : Terme) : Reel Donner le corps de la fonction suivante qui calcule la valeur d’une expression que l’on sait correctement form´e : e fonction evaluer (e : Expression) : Reel as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 19 / 23
  • 20. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e ´ Evaluation d’une expression arithm´tique 3 / 5 e Analyse du probl`me e Une expression arithm´tique est : e soit un nombre, soit une op´ration compos´e d’un op´rateur et de deux op´randes qui e e e e sont des expressions arithm´tiques e ´ Evaluer une expression arithm´tique : e Si c’est un nombre, sa valeur est la valeur de ce nombre Si c’est une op´ration, sa valeur est le calcul de cette op´ration en e e ´valuant ses deux op´randes e e ´ Evaluer une expression arithm´tique revient donc ` ´valuer le e ae contenu de la premi`re case du tableau e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 20 / 23
  • 21. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e ´ Evaluation d’une expression arithm´tique 4 / 5 e Solution fonction evaluer (e : Expression) : Reel debut retourner evaluerRecursivement(e,1) fin as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 21 / 23
  • 22. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e ´ Evaluation d’une expression arithm´tique 5 / 5 e Solution fonction evaluerRecursivement (e : Expression, indice : Naturel) : Reel D´claration v1,v2 : Reel e debut si non estUneOperation(e[indice]) alors retourner obtenirNombre(e[indice]) sinon v1 ← evaluerRecursivement(e,2*indice) v2 ← evaluerRecursivement(e,2*indice+1) cas o` obtenirOperation(e[indice]) vaut u addition : retourner v1+v2 soustraction : retourner v1-v2 multiplication : retourner v1*v2 division : retourner v1/v2 fincas finsi fin as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 22 / 23
  • 23. Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion e e Conclusion. . . En conclusion Les algorithmes r´cursifs sont simples (c’est simplement une autre e fa¸on de penser) c Les algortihmes r´cursifs permettent de r´soudre des probl`mes e e e complexes Il existe deux types de r´cursivit´s : e e terminale, qui algorithmiquement peuvent ˆtre transform´e en e e algorithme non r´cursif e non terminale Les algorithmes r´cursifs sont le plus souvent plus gourmands en e ressource que leurs ´quivalents it´ratifs e e as Architecture des Systèmes d’Information R´cursivit´ - v1.2 e e 23 / 23