Vous êtes sur la page 1sur 23

Introduction Comment crire un algorithme rcursif ?

Quelques exemples Conclusion e e

Rcursivit e e
I3 - Algorithmique et programmation

Nicolas Delestre

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

1 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Plan

Introduction Comment crire un algorithme rcursif ? e e Quelques exemples Les tours de Hano Remplir une zone graphique Evaluation dune expression arithmtique e Conclusion

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

2 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Introduction

Dnition e Une entit est rcursive lorsquon e e lutilise pour la dnir e


Drawing Hands, Escher (1948)

http://www.russie.net/russie/art_ matriochka.htm
Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

3 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Exemples 1 / 2
Factorielle 0! = 1! = 1 n! = n(n 1)! Suite de bonacci F (0) = 0 F (1) = 1 F (n) = F (n 1) + F (n 2), n > 1 Poupe russe e Une poupe russe est e une poupe pleine e une poupe vide contenant une poupe russe e e
Rcursivit - v1.2 e e
Architecture des Systmes dInformation

as

4 / 23

Introduction Comment crire un algorithme rcursif ? 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) nsi n

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

5 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Rcursivit terminale e e
Dnition e Lappel rcursif est la derni`re instruction et elle est isole 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) nsi n plus(4,2)=plus(5,1)=plus(6,0)=6
Rcursivit - v1.2 e e

Architecture des Systmes dInformation

as

6 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Rcursivit non terminale e e


Dnition e Lappel rcursif nest pas la derni`re instruction et/ou elle nest pas isole e e e (fait partie dune expression) plus(a,b) fonction plus (a,b : Naturel) : natuel debut si b=0 alors retourner a sinon retourner 1+plus(a,b-1) nsi n plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6
Rcursivit - v1.2 e e

Architecture des Systmes dInformation

as

7 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Mthode e

Pour crire un algorithme rcursif il faut analyser le probl`me pour : e e e identifer le ou les cas particuliers identier le cas gnral qui eectue la rcursion e e e Surtout Lorsque lon crit un algorithme rcursif, lors de lappel rcursif, on se e e e positionne en tant quutilisateur de lalgorithme : on consid`re donc que e le probl`me est rsolu e e

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

8 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Les tours de Hano 1 / 4


Prsentation e

Les tours de hano est un jeu solitaire dont lobjectif est de dplacer 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 dplacer que le disque se trouvant au sommet dune tour ; e on ne peut dplacer quun seul disque ` la fois ; e a un disque ne peut pas tre pos sur un disque plus petit. e e
Rcursivit - v1.2 e e

Architecture des Systmes dInformation

as

9 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Les tours de Hano 2 / 4

Oprations disponibles e
procdure dpilerTour (E/S t : TourDeHanoi,S d : Disque) e e procdure empilerTour (E/S t : TourDeHanoi,E d : Disque) e

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

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

10 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Les tours de Hano 3 / 4

Analyse du probl`me e

2 1 3

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

11 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Les tours de Hano 4 / 4

Solution
procdure resoudreToursDeHanoi (E nbDisquesADeplacer : Naturel, E/S source, e destination, intermediaire : TourDeHanoi) Dclaration 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) nsi n

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

12 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Remplir une zone graphique 1 / 5


Prsentation e Un cran graphique est un quadrillage e Chaque intersection de ce quadrillage est un pixel qui peut tre e coloris e

Oprations disponibles e
procdure xerCouleurPixel (E/S e : Ecran,E x,y : Naturel, c : Couleur) e fonction obtenirCouleurPixel (e : Ecran,x,y : Naturel) : Couleur
Rcursivit - v1.2 e e

Architecture des Systmes dInformation

as

13 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Remplir une zone graphique 2 / 5

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

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

14 / 23

Introduction Comment crire un algorithme rcursif ? 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 commenant par celui qui est donn : c e
Si le pixel de coordonne (x, y ) est dune couleur dirente de e e ancienneCouleur
Ne rien faire

Si le pixel de coordonne (x, y ) est de la mme couleur que e e ancienneCouleur


Changer la couleur de ce pixel Tenter de changer la couleur (remplir) des points qui se trouvent autour

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

15 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Remplir une zone graphique 4 / 5


Solution procdure remplir (E/S e : Ecran,E x,y : Naturel, ancienneCouleur, e nouvelleCouleur : Couleur) debut si obtenirCouleurPixel(e,x,y)=ancienneCouleur alors xerCouleurPixel(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) nsi n Note On pourrait amliorer lalgorithme en vriant quon ne sort pas de e e as lcran e
Rcursivit - v1.2 e e

Architecture des Systmes dInformation

16 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Remplir une zone graphique 5 / 5


Exemple dordre 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

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

17 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Evaluation dune expression arithmtique 1 / 5 e


Prsentation e Il y a plusieurs faon de noter une expression arithmtique c e
Inxe : 2*(3+5) Prxe (ou notation polonaise) : * 2 + 3 5 e Postxe (ou notation polonaise inverse) : 3 5 + 2 * e

En sinspirant de la notation prxe on peut reprsenter une e e expression aritmtique ` laide dun tableau tel que la i`me case e a e peut contenir :
un nombre un oprateur et dans ce cas les oprandes sont ` la position 2i et e e a 2i + 1

5
Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

18 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Evaluation dune expression arithmtique 2 / 5 e

Objectif En supposant que lon 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 dune expression que lon sait correctement forme : e
fonction evaluer (e : Expression) : Reel

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

19 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Evaluation dune expression arithmtique 3 / 5 e

Analyse du probl`me e Une expression arithmtique est : e


soit un nombre, soit une opration compose dun oprateur et de deux oprandes qui e e e e sont des expressions arithmtiques e

Evaluer une expression arithmtique : e


Si cest un nombre, sa valeur est la valeur de ce nombre Si cest une opration, sa valeur est le calcul de cette opration en e e valuant ses deux oprandes e e

Evaluer une expression arithmtique revient donc ` valuer le e ae contenu de la premi`re case du tableau e

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

20 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Evaluation dune expression arithmtique 4 / 5 e

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

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

21 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Evaluation dune expression arithmtique 5 / 5 e


Solution
fonction evaluerRecursivement (e : Expression, indice : Naturel) : Reel Dclaration 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 ncas nsi n

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

22 / 23

Introduction Comment crire un algorithme rcursif ? Quelques exemples Conclusion e e

Conclusion. . .

En conclusion Les algorithmes rcursifs sont simples (cest simplement une autre e faon de penser) c Les algortihmes rcursifs permettent de rsoudre des probl`mes e e e complexes Il existe deux types de rcursivits : e e
terminale, qui algorithmiquement peuvent tre transforme en e e algorithme non rcursif e non terminale

Les algorithmes rcursifs sont le plus souvent plus gourmands en e ressource que leurs quivalents itratifs e e

Architecture des Systmes dInformation

as

Rcursivit - v1.2 e e

23 / 23

Vous aimerez peut-être aussi