Vous êtes sur la page 1sur 5

Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Chapitre 2

La Rcursivit

Dfinition rcursive : cest le cas lorsque le dfinition dune partie dun tout fait
appel au tout.
Algorithme rcursif : cest un algorithme qui comporte un appel lui mme.

Exemple :un enregistrement dfinie rcursivement

Enregistrement personne
Nom : chane de caractres
Prnom : chane de caractres
Age : entier
Parent : personne
Fin enregistrement

Proprits des dfinitions et algorithmes rcursifs

La rcursivit peut tre :


1. Directe :cest le cas dun algorithme qui appelle lui mme .
2. Indirecte (ou croise) : un algorithme en appelle un autre qui appelle le
premier .
Dans la pratique pour viter la rcursivit linfinie, une dfinition ou un
algorithme rcursif doit contenir une clause de finitude qui permet de faire
lvaluation sans rcursivit.
La forme gnrale dun algorithme rcursif st la suivante :

Algorithme P (.)
dbut
Si (fin) alors
.. // pas dappel rcursif

Sinon
..
P() // lalgorithme P appelle lui mme une
.. // ou plusieurs fois
fin si
fin

1
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Exemples dalgorithmes rcursifs

1. La factorielle dun nombre entier


La factorielle dun nombre n donn est le produit des nombres entiers infrieurs ou
gales ce nombres .
Il existe diffrente faon de le dcrire :
0 !=1
1 !=1
2 !=1*2
.
.
n !=1*2*.*(n-1)*n
une deuxime notation plus rigoureuse fait appel la rcurrence

1 si n=0
n !=
n*(n-1) ! si n>0

n ! est dfinie en fonction de lui mme (n-1) !

lalgorithme factorielle(n) permet de calculer la factorielle de lentier n. cet


algorithme est rcursif et se rappelle une fois en factorielle(n-1). Il y a fin dappels
rcursifs lorsque n vaut 0.
Algorithme factorielle(n :entier)
Var m :entier
dbut
Si n=0 alors
Valeur_de_retour 1

Sinon
m factorielle(n-1)
Valeur_de_retour n*m

fin si
fin

Droulement de lexcution pour n=3 :

1 2 3 4
factorielle(3) n=3
mfactorielle(2) n=2
mfactorielle(1) n=1
mfactorielle(0) n=0
valeur_de_retour1
valeur_de_retour1*1
valeur_de_retour2*1
valeur_de_retour3*2

2
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Pour calculer factorielle(3) il faut calculer factorielle(2). Pour calculer factorielle(2) il


faut calculer factorielle(1). Pour calculer factorielle(1) il faut connatre factorielle(0).
factorielle(0) vaut 1. on revient en arrire terminer lalgorithme au niveau 3, 2 puis 1.

2. Dtermination si un nombre est pair ou non.

Lalgorithme pair(n :entier) renvoie Vrai si n est pair et Faux si n est impair.

n est pair si et seulement si k tel que n=2*k


n est impair si et seulement si k tel que n=2*k+1

mais on peut crire aussi :

n est pair si n-1 est impair


n est impair si n-1 est pair
0 est pair

Algorithme pair(n :entier) Algorithme impair(n :entier)

dbut dbut
Si n=0 alors Si n=0 alors
Valeur_de_retour vrai Valeur_de_retour faux

Sinon Sinon

Valeur_de_retour impair(n-1) Valeur_de_retour pair(n-1)

fin si
fin si fin
fin

Droulement dexcution pour pair(3)

1 2 3 4
pair(3) n=3
impair(2) n=2
pair(1) n=1
impair(0) n=0
valeur_de_retourfaux
valeur_de_retourfaux
valeur_de_retourfaux
valeur_de_retourfaux

3
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

3. Boucles rcursives.
une boucle peut scrire sous forme rcursive. il faut raliser une action (criture par
exemple). et recommencer avec une nouvelle valeur de lindice de boucle.
la boucle peut tre croissante ou dcroissante suivant laction ralise avant ou aprs
lappel rcursif.
soit la boucle suivante :

pour i=1 5 faire

crire(i)

fin pour

on peut lcrire rcursivement comme suite :

Algorithme boucle_dcroissante(n) Algorithme boucle_croissante(n)


dbut dbut
si n<0 alors ou si n<0 alors
crire(n) boucle_croissante(n-1)
boucle_dcroissante(n-1) crire(n)
fin si fin si
fin fin

rsultats de lexcution :
pour lalgorithme croissante 5 4 3 2 1
pour lalgorithme dcroissante 1 2 3 4 5

Analyse rcursive

pour trouver une solution rcursive un prblme, on cherche le dcomposer en


plusieurs sous problmes de mme type mais de taille inferieur. La mthode gnrale
tant la suivante :
1 Paramtrage du problme : on dtermine les lments dont dpend la
solution et qui caracterisent la taille du problme.
2 Recherche dun cas trivial et de sa solution.
3 Dcomposition du cas gnrale en cas plus simples, eux mme
dcomposables pour aboutir au cas trivial.

Ralisation de la rcursivit

Du fait quun sous programme rcursif sappelle lui mme, on recommence


lexcution du sous programme avec des nouvelles donnes avant davoir fini
lexcution avec les donnes de lappel prcdent.
Le problme de ralisation dun sous programme rcursif est donc la sauvegarde de
chaque appel de sous programme, des rsultats intermdiaires, et les adresses de
retour.

4
Support de Cours Algos & structures de donnes Mr BERREHOUMA N.

Ce problme est rsolu en utilisant systmatiquement une pile. A chaque entre dans
le sous programme, on empile les variables et les adresses sauvegarder, chaque
sortie, on dpile.

Remarque
Une pile est une structure de donnes dans laquelle des donnes sont insres
et enleves selon le principe dernier arriv premier sortie, (exemple pile des
livres, pile d assiettes,..)

certains langages ne permettent pas la rcursivit.

Vous aimerez peut-être aussi