Your SlideShare is downloading. ×
Recursivite
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Recursivite

221
views

Published on

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

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


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
221
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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