Académique Documents
Professionnel Documents
Culture Documents
Rcursivit e e
I3 - Algorithmique et programmation
Nicolas Delestre
as
Rcursivit - v1.2 e e
1 / 23
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
as
Rcursivit - v1.2 e e
2 / 23
Introduction
http://www.russie.net/russie/art_ matriochka.htm
Architecture des Systmes dInformation
as
Rcursivit - v1.2 e e
3 / 23
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
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
as
Rcursivit - v1.2 e e
5 / 23
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
as
6 / 23
as
7 / 23
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
as
Rcursivit - v1.2 e e
8 / 23
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
as
9 / 23
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)
as
Rcursivit - v1.2 e e
10 / 23
Analyse du probl`me e
2 1 3
as
Rcursivit - v1.2 e e
11 / 23
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
as
Rcursivit - v1.2 e e
12 / 23
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
as
13 / 23
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)
as
Rcursivit - v1.2 e e
14 / 23
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
as
Rcursivit - v1.2 e e
15 / 23
16 / 23
2 9 1 7 8 3 6 4 5
as
Rcursivit - v1.2 e e
17 / 23
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
Donner le corps de la fonction suivante qui calcule la valeur dune expression que lon sait correctement forme : e
fonction evaluer (e : Expression) : Reel
as
Rcursivit - v1.2 e e
19 / 23
Evaluer une expression arithmtique revient donc ` valuer le e ae contenu de la premi`re case du tableau e
as
Rcursivit - v1.2 e e
20 / 23
Solution
fonction evaluer (e : Expression) : Reel debut retourner evaluerRecursivement(e,1) n
as
Rcursivit - v1.2 e e
21 / 23
as
Rcursivit - v1.2 e e
22 / 23
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
as
Rcursivit - v1.2 e e
23 / 23