Professional Documents
Culture Documents
Rcursivit e e
Pr. Mohamed EL ANSARI
Dpartement dInformatique e Facult des Sciences, Universit Ibn Zohr e e Agadir
c Printemps 2011
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Plan
1 2 3 4
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Les tours de Hano Suite rcurrente e Exponentiation rapide Dangers et prcautions e Conclusion
5 6
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Rcursivit e e
En informatique, la rcursivit est un des concepts de e e programmation les plus importants. Permet de rsoudre des probl`mes complexes en les e e dcomposant en probl`mes plus petits e e Une procdure (ou fonction) est dite rcursive lorsquelle fait e e appel ` elle mme. a e Cest lquivalent de la rcurrence en mathmatique. e e e La programmation rcursive sert ` remplacer les boucles e a (while, for, etc). Il faut vrer si le processus ne boucle pas indniment. e e Une procdure ou fonction rcursive peut sappeler plusieurs e e fois.
Pr. Mohamed EL ANSARI Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Exemples
Factorielle Par exemple, la fonction factorielle peut tre dnie sous e e forme rcursive de la mani`re suivante: e e
si n=0 alors factorielle(n)=1 sinon factorielle(n)=n*factorielle(n-1)
Lorsque n 1, il y a rcursivit car la dnition de e e e factorielle(n) fait appel ` factorielle(n-1). a Suite de Fibonacci F (0) = 0 F (1) = 1 F (n) = F (n 1) + F (n 2), si n > 1
Pr. Mohamed EL ANSARI Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Exemple
Factorielle
fonction fact(N:Naturel):Naturel debut
si N=0 alors
retourner 1
sinon
retourner N*fact(N-1)
nsi
n
Rcursivit e e
Rcursivit terminale e e
Dnition e Une dnition de fonction f est rcursive terminale quand tout appel rcursif e e e est de la forme return f(...); La valeur retourne est directement la valeur e obtenue par un appel rcursif, sans quil ny ait aucune opration sur cette e e valeur. somme(a,b) function somme(a,b:Naturel):Naturel debut
si b=0 alors
retourner a
sinon
retourner somme(a+1,b-1)
nsi
end somme(4,2)=somme(5,1)=somme(6,0)=6
Dnition e Lappel rcursif nest pas la derni`re instruction et/ou elle nest pas e e isole (fait partie dune expression). e
somme(a,b) function somme(a,b:Naturel):Naturel debut si b=0 alors retourner a sinon retourner 1+somme(a,b-1) nsi end somme(4,2)=1+somme(4,1)=1+1+somme(4,0)=1+1+4=6
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
La recette de rcursivit e e
Sassurer que le probl`me peut se dcomposer en un ou e e plusieurs sous-probl`mes de mme nature. e e Identier le cas de base qui est le plus petit probl`me qui ne e se dcompose pas en sous-probl`mes e e Rsoudre(P) = e
si P est un cas de base, le rsoudre directement e sinon
dcomposer P en sous-probl`mes P1, P2,... e e rsoudre rcursivement P1, P2,... e e combiner les rsultats pour obtenir la solution pour P e
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Les tours de hano est un jeu solitaire dont lobjectif est de dplacer les disques e qui se trouvent sur une tour (par exemple ici la premi`re tour, celle la plus ` e a gauche) vers une autre tour (par exemple la derni`re, celle la plus ` droite) en e a suivant les r`gles suivantes : 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
Pr. Mohamed EL ANSARI Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
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 : e Naturel , E/S source, destination, intermediaire : TourDeHanoi )
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Rcursivit e e
Fonction rcursive e
procdure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel , E/S e source, destination, intermediaire : TourDeHanoi ) Dclaration d : Disque e debut si nbDisquesADeplacer= 1 alors depiler(source,d) empiler(destination,d) sinon resoudreToursDeHanoi(nbDisquesADeplacer-1, source, intermediaire, destination) depiler(source,d) empiler(destination,d) resoudreToursDeHanoi(nbDisquesADeplacer-1, intermediaire, destination, source) nsi n
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Suite rcurrente e
1+un 2 .
Ecrire la fonction rcursive qui renvoie la valeur de un . e Rcrire cette mme fonction sous forme non rcursive (forme ee e e dite itrative). e
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Exponentiation rapide
Exponentiation rapide Ecrire la fonction rcursive qui renvoie la valeur de x n avec la e mthode suivante : e Si n est pair alors on l`ve x 1/2 au carr. ee e Sinon on calcule x x (n1)/2
2
Rcursivit e e
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Dangers et prcautions e
1
Dpassement de capacit e e
Tentative de stocker un nombre plus grand que ce que peut contenir le type de votre variable. Choisir un type appropri e Exemple, pour le calcul des factoriels: utiliser long au lieu de int.
Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion
Conclusion
Les algortihmes rcursifs permettent de rsoudre des e e probl`mes complexes. e Il est sain de ramener un probl`me ` des sous-probl`mes. e a e La rcursivit permet de ramener un probl`me ` un e e e a sous-probl`me qui est le probl`me lui-mme avec des donnes e e e e plus simples. Les algorithmes rcursifs sont le plus souvent plus gourmands e en ressource que leurs quivalents itratifs. e e
Rcursivit e e