Vous êtes sur la page 1sur 16

Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion

Rcursivit e e
Pr. Mohamed EL ANSARI
Dpartement dInformatique e Facult des Sciences, Universit Ibn Zohr e e Agadir

Fili`re: SMI4 e Module: Algorithmes & Structures de donnes e

c Printemps 2011

Pr. Mohamed EL ANSARI

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

Pr. Mohamed EL ANSARI

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

Programme en langage C long fact(int N) { if (N==0) return 1; else return N*fact(N-1); }

Pr. Mohamed EL ANSARI

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

Rcursivit non terminale e e

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

Pr. Mohamed EL ANSARI

Rcursivit e e

Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion

Les tours de Hano Suite rcurrente e Exponentiation rapide

Les tours de Hano


Prsentation e

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

Les tours de Hano Suite rcurrente e Exponentiation rapide

Les tours de Hano

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 )

Pr. Mohamed EL ANSARI

Rcursivit e e

Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion

Les tours de Hano Suite rcurrente e Exponentiation rapide

Les tours de Hano


Analyse du probl`me e

Pr. Mohamed EL ANSARI

Rcursivit e e

Les tours de Hano


Solution

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

Les tours de Hano Suite rcurrente e Exponentiation rapide

Suite rcurrente e

Suite rcurrente e Soit u la suite dnie par u0 = 0 et n N, un+1 = e


1 2

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

Pr. Mohamed EL ANSARI

Rcursivit e e

Dnition e Rcursivit terminale e e Rcursivit non terminale e e Exemples Dangers et prcautions e Conclusion

Les tours de Hano Suite rcurrente e Exponentiation rapide

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

Pr. Mohamed EL ANSARI

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.

Dbordement de pile (stack overow) e


Appels rcursifs sont placs dans la pile du programme. e e La taille de pile est assez limite et xe tout au long du e e programme Grande taille de donnes dbordement de la pile sortie e e anormale du programme.
Pr. Mohamed EL ANSARI Rcursivit e e

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

Pr. Mohamed EL ANSARI

Rcursivit e e