Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Algorithmes r´ecursifs
Nour-Eddine Oussous, ´
Eric Wegrzynowski
Licence ST-A, USTL - API2
19 septembre 2007
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Introduction
Exemple 1
Exemple 2
Exemple 3
Algorithmes r´ecursifs
efinition
Exemples
Ex´ecution d’un algorithme r´ecursif
R`egles de conception
Types de r´ecursivit´e
ecursivit´e simple ou lin´eaire
ecursivit´e multiple
ecursivit´e crois´ee ou mutuelle
ecursivit´e en Pascal
Factorielle en Pascal
Tours de Hano¨ı en Pascal
Pr´edicats de parit´e en Pascal
Conclusion
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Introduction
IEn programmation, de nombreux probl`emes r´esolus par
r´ep´etition de tˆaches
Icertains langages (comme Pascal) munis de structures de
contrˆoles r´ep´etitives : boucles pour et tant que
IMais certains probl`emes se r´esolvent simplement en r´esolvant
des probl`emes identiques
C’est la r´ecursivit´e
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemple 1
Les tours de Hano¨ı : le probl`eme
R`egles (op´erations ´el´ementaires)
1. d´eplacer un disque `a la fois d’un bˆaton sur un autre
2. ne jamais mettre un disque sur un plus petit
But : transf´erer la pile de disques de Avers B.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemple 1
Les tours de Hano¨ı : une solution ?
1. Mettre tous les disques sauf le plus grand sur C
2. D´eplacer le plus grand disque de Avers B
3. Mettre tous les disques de Csur B
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemple 1
Les tours de Hano¨ı : une solution
ILes points 1 et 3 de la solution esquiss´ee sont des probl`emes
de Hano¨ı avec un disque de moins
Isi on sait r´esoudre le probl`eme avec n1 disques, alors on
sait le r´esoudre avec ndisques
IOr on sait r´esoudre le probl`eme avec 1 disque
Ile probl`eme est r´esolu pour tout nombre n1 de disques
(principe de r´ecurrence)
La solution est r´ecursive
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemple 2
Calcul de d´eriv´ees
IR`egles de d´erivation
I(u+v)0=u0+v0
I(uv)0=u0v0
I(uv)0=u0v+uv0
Iu
v0=u
0
vuv
0
v2
I. . .
Ipour d´eriver il faut savoir d´eriver !
IOr on sait d´eriver les fonctions de base
Ion sait d´eriver toutes les fonctions (d´erivables bien
entendu !).
Le calcul est r´ecursif
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemple 3
Calcul de factorielle
ISoit `a calculer n!=1·2·3· · · (n1) ·n
IOn sait que pour n>0, n! = n·(n1)!
Isi on sait calculer (n1)!, alors on sait calculer n!
IOr on sait calculer 0! = 1
Ion sait calculer n! pour tout n0
Le calcul est r´ecursif
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
efinition
D´efinition
D´efinition
Un algorithme de r´esolution d’un probl`eme Psur une donn´ee aest
dit r´ecursif si parmi les op´erations utilis´ees pour le r´esoudre, on
trouve une r´esolution du mˆeme probl`eme Psur une donn´ee b.
Appel r´ecursif
Dans un algorithme r´ecursif, on nomme appel r´ecursif toute ´etape
de l’algorithme r´esolvant le mˆeme probl`eme sur une autre donn´ee.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemples
Tours de Hano¨ı : Algorithme
Tours de Hano¨ı
H(n,D,A,I) = probl`eme de d´eplacement de ndisques depuis la
tour Dvers la tour Aavec la tour interm´ediaire I
H(n,D,A,I) :
s i n= 1 a l o r s
d e p l a c e r d i sq u e de Dvers A
sinon
H(n1 , D,I,A);
d e p l a c e r d i sq u e de Dvers A ;
H(n1 , I,A,D);
f i n s i
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemples
D´erivation : Algorithme
D´erivation
deriver(f) = probl`eme du calcul de la d´eriv´ee de f
d e r i v e r (f) :
s i fe s t une f o n c t i o n de b as e a l o r s
don ner l a d e r i v e e de f
sinon
s i fest de l a forme u+va l o r s
d e r i v e r (u) + d e r i v e r (v)
s i fest de l a forme uva l o r s
. . .
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Exemples
Factorielle : Algorithme
Factorielle
fact(n) = probl`eme du calcul de n!
f a c t (n) :
s i n= 0 a l o r s
f a c t ( 0) = 1
sinon
f a c t (n) = n×fact(n1)
f i n s i
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Ex´ecution d’un algorithme r´ecursif
Ex´ecution d’un algorithme r´ecursif
Calcul de 4! :
fact(4) 4·fact(3) 4·3·fact(2) 4·3·2·fact(1)
4·3·2·1·fact(0) 4·3·2·1·124
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
Ex´ecution d’un algorithme r´ecursif
Ex´ecution d’un algorithme r´ecursif
Ex´ecution de l’algorithme des tours de Hano¨ı pour d´eplacer trois
disques de la tour Avers la tour B
En rouge, la suite des d´eplacements effectu´es au cours de
l’ex´ecution de l’algorithme.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
R`egles de conception
R`egles de conception
Attention
Il existe des algorithmes r´ecursifs qui ne produisent aucun r´esultat
f a c t (n) :
f a c t (n) = n×fact(n1)
fact(1) 1·fact(0) 1·0·fact(-1) . . .
calcul infini
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
R`egles de conception
R`egles de conception
Premi`ere r`egle
Tout algorithme r´ecursif doit distinguer plusieurs cas, dont l’un au
moins ne doit pas comporter d’appel r´ecursif.
sinon risque de cercles vicieux et de calcul infini
Condition de terminaison, cas de base
Les cas non r´ecursifs d’un algorithme r´ecursif sont appel´es cas de
base.
Les conditions que doivent satisfaire les donn´ees dans ces cas de
base sont appel´ees conditions de terminaison.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
R`egles de conception
R`egles de conception
Attention
Mˆeme avec un cas de base un algorithme r´ecursif peut ne produire
aucun r´esultat
f a c t (n) :
s i n= 0 alors
f a c t ( 0) = 1
sinon
f a c t (n) = f a c t (n+ 1) / (n+ 1)
f i n s i
fact(1) fact(2)/2 fact(3)/(2 ·3) . . .
calcul infini
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
R`egles de conception
R`egles de conception
Seconde r`egle
Tout appel r´ecursif doit se faire avec des donn´ees plus (( proches ))
de donn´ees satisfaisant une condition de terminaison.
Th´eor`eme
Il n’existe pas de suite infinie strictement d´ecroissante d’entiers
positifs ou nuls.
Ce th´eor`eme permet de contrˆoler l’arrˆet d’un calcul suivant un
algorithme r´ecursif.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
ecursivit´e simple ou lin´eaire
R´ecursivit´e simple ou lin´eaire
R´ecursivit´e simple ou lin´eaire
Un algorithme r´ecursif est simple ou lin´eaire si chaque cas qu’il
distingue se r´esout en au plus un appel r´ecursif.
Algorithmes r´ecursifs Licence ST-A, USTL - API2
Plan Introduction Algorithmes r´ecursifs Types de r´ecursivit´e ecursivit´e en Pascal Conclusion
ecursivit´e simple ou lin´eaire
R´ecursivit´e simple ou lin´eaire
L’algorithme de calcul de n! est r´ecursif simple.
f a c t (n) :
s i n= 0 a l o r s
f a c t ( 0) = 1
sinon
f a c t (n) = n·fact(n1)
f i n s i
Algorithmes r´ecursifs Licence ST-A, USTL - API2
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !