Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Introduction Comment ´crire un algorithme r´cursif ? Quelques exemples Conclusion                        e                ...
Prochain SlideShare
Chargement dans…5
×

Recursivite

545 vues

Publié le

Contient plusieurs exemple précis sur la notion du récursivité...

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
545
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
42
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Recursivite

  1. 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’InformationR´cursivit´ - v1.2 e e 1 / 23
  2. 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’InformationR´cursivit´ - v1.2 e e 2 / 23
  3. 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’InformationR´cursivit´ - v1.2 e e 3 / 23
  4. 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’InformationR´cursivit´ - v1.2 e e 4 / 23
  5. 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’InformationR´cursivit´ - v1.2 e e 5 / 23
  6. 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’InformationR´cursivit´ - v1.2 e e 6 / 23
  7. 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’InformationR´cursivit´ - v1.2 e e 7 / 23
  8. 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’InformationR´cursivit´ - v1.2 e e 8 / 23
  9. 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’InformationR´cursivit´ - v1.2 e e 9 / 23
  10. 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’InformationR´cursivit´ - v1.2 e e 10 / 23
  11. 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’InformationR´cursivit´ - v1.2 e e 11 / 23
  12. 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’InformationR´cursivit´ - v1.2 e e 12 / 23
  13. 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’InformationR´cursivit´ - v1.2 e e 13 / 23
  14. 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’InformationR´cursivit´ - v1.2 e e 14 / 23
  15. 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’InformationR´cursivit´ - v1.2 e e 15 / 23
  16. 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’InformationR´cursivit´ - v1.2 e e 16 / 23
  17. 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’InformationR´cursivit´ - v1.2 e e 17 / 23
  18. 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’InformationR´cursivit´ - v1.2 e e 18 / 23
  19. 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’InformationR´cursivit´ - v1.2 e e 19 / 23
  20. 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’InformationR´cursivit´ - v1.2 e e 20 / 23
  21. 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’InformationR´cursivit´ - v1.2 e e 21 / 23
  22. 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’InformationR´cursivit´ - v1.2 e e 22 / 23
  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’InformationR´cursivit´ - v1.2 e e 23 / 23

×