0% ont trouvé ce document utile (0 vote)
10 vues40 pages

Seance 6

Le document traite de l'algorithmique, en se concentrant sur la récursivité et ses types, tels que la récursivité simple, multiple, mutuelle, imbriquée et terminale. Il présente également des exemples concrets, comme les tours de Hanoï, pour illustrer ces concepts. Enfin, il fournit des algorithmes et des exercices pratiques pour renforcer la compréhension de la récursivité.

Transféré par

nabou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
10 vues40 pages

Seance 6

Le document traite de l'algorithmique, en se concentrant sur la récursivité et ses types, tels que la récursivité simple, multiple, mutuelle, imbriquée et terminale. Il présente également des exemples concrets, comme les tours de Hanoï, pour illustrer ces concepts. Enfin, il fournit des algorithmes et des exercices pratiques pour renforcer la compréhension de la récursivité.

Transféré par

nabou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Algorithmique

Pr. RAOUYANE Brahim


Département Mathématiques & Informatique
SMI3 2014

1
Résumé
Fonction Nom_Fonction(var:type,var:type):type Procédure Nom_Procédure(var:type,var:type)
Variables internes Variables internes
DébutFonction DébutProcédure
Instructions Instructions
……….. ………..
Retourner variable; Instructions
FinFonction FinProcédure

Algorithme principale
Variables : ………(Globales)
Constantes: ………..
Fonctions: …………
Début
variable ←Nom_Fonction(var,var)
Nom_Fonction(var,var) Appel d’une Fonction
Ecrire(Nom_Fonction(var,var))
Nom_Procédure(var,var) Appel d’une Procédure
…………
Fin
2
Récursivité

3
Plan
I. Définition et exemples
II. Types de récursivité
III. Algorithme récursif
IV. Exemple : Les tours de Hanoï
V. Recette de la récursivité
VI. Exécution des algorithmes
récursifs
[Link] et tris récursifs
4
Définition et exemples

5
Qu'est-ce que la récursion ?
 Définition linguistique:
 Le mot « récursion » vient du latin recursare
qui signifie courir en arrière, revenir.
 L'idée de réapparition, de retour, est donc
étymologiquement liée à la récursivité.
 Définition:
 Lorsqu'un système contient une autoréférence
(ou une copie de lui-même), on dit que ce
système est récursif.

6
Exemples
 Dans le domaine végétal, le romanesco (hybride broccolo/choux-fleur) est très
récursif.

 L'effet droste (image en abyme).

7
Exemples
 Les poupées russes ou matriochkas sont des séries de
poupées de tailles décroissantes placées les unes à
l'intérieur des autres. Une poupée russe est donc :
 Soit une poupée « pleine » (qu'on ne peut ouvrir),
 Soit une poupée « vide » contenant une poupée russe.

8
Conclusion
 La récursivité est un concept très puissant quand on
sait décomposer un problème en un ou
plusieurs sous-problèmes qui sont de même
nature, mais qui s'appliquent à un nombre d'objets
plus réduit.
 De même quand on sait décomposer un objet en
groupes de composants qui présentent les mêmes
propriétés que l'objet lui-même et qui ne contiennent
qu'un sous-ensemble de l'objet.

9
Types de Récursivité

10
Définition
 Une définition récursive est une définition dans laquelle intervient ce
que l'on veut définir.
 Un algorithme récursif est un algorithme défini en fonction de lui-
même.
 Une procédure (ou fonction) P est dite récursive si son
exécution peut provoquer un ou plusieurs appels (dits récursif) à P.
 Récursivité Simple
 Récursivité Multiple
 Récursivité Mutuelle
 Récursivité Imbriquée
 Récursivité Terminale

11
Récursivité simple
 Définition
 Une récursivité simple contient un seul appel récursif à P
dans le corps d'une procédure récursive P.
 Exemple
 Un escalier de hauteur c'est :
 Vision Itérative: une séquence de marches
 Vision Récursive: une marche suivie d'un escalier de hauteur

12
Récursivité simple

 Vision Récursive: une marche suivie d'un escalier de


hauteur
 L'algorithme Récursif correspondant s'écrit :
Action monterEscalier ( h : Entier )
Début
Si ( h > 0 ) Alors
monterMarche ( )
monterEscalier ( h - 1 )
FinSi
Fin
13
Récursivité multiple
 Définition
 Une récursivité est multiple si il y a plusieurs appels
récursifs à P dans le corps d'une procédure récursive P.
 Exemple
 La suite de Fibonacci est définie par ( entier naturel) :

14
Récursivité multiple
 La suite de Fibonacci est définie par ( entier naturel) :

 L'algorithme correspondant s'écrit :


Fonction fib( n : Entier ) : Entier
Début
Si ( n = 0 Ou n = 1 ) Alors
Retourner ( n )
Sinon
Retourner ( fib ( n - 1 ) + fib ( n - 2 ) )
FinSi 1 2
Fin
15
Récursivité mutuelle
 Définition
 Une récursivité est mutuelle ou croisée quand une procédure
P appelle une procédure Q qui déclenche un appel
récursif à P.
 Remarque
 La situation est obligatoirement symétrique, puisque Q déclenchera un
appel de P, qui déclenchera à son tour un appel de Q.
 Exemple
 La parité d'un entier naturel peut être définie par :

16
Récursivité mutuelle
 Les algorithmes correspondants s'écrivent :
Fonction pair( n : Entier ) : Booléen Fonction impair ( n : Entier ) : Booléen
Début Début
Si ( n = 0 ) Alors Si ( n = 0 ) Alors
Retourner ( Vrai ) Retourner ( Faux )
Sinon Sinon
Retourner ( impair ( n - 1 ) ) Retourner ( pair ( n - 1 ) )
FinSi FinSi
Fin Fin

 Les fonctions pair() et impair() s'invoquent mutuellement :


 pair(3) -> impair(2) -> pair(1) -> impair(0)
 La dernière invocation renvoie Faux :
 impair(0)=Faux -> pair(1)=Faux -> impair(2)=Faux -> pair(3)=Faux -> Faux

17
Récursivité imbriquée
 Définition
 Une récursivité est imbriquée si une procédure récursive P
contient un appel imbriqué.
 Exemple
 La fonction d'Ackermann ( et entiers naturels) est définie
comme suit :

18
Récursivité imbriquée
 L'algorithme de la fonction d'Ackermann correspondant
s'écrit :
Fonction ackermann ( n , p : Entier ) : Entier
Début
Si ( n = 0 ) Alors
Retourner ( p + 1 )
Sinon
Si ( p = 0 ) Alors
Retourner ( ackermann ( n - 1 , 1 ) )
Sinon
Retourner ( ackermann ( n - 1 , ackermann ( n , p - 1 ) )
FinSi
FinSi
Fin
19
Récursivité terminale
 Définition
 La récursivité est terminale si l'appel récursif est la dernière
instruction et elle est isolée.
 Exemple
 L'addition de deux entiers positifs ou nuls peut être définie
comme suit :
Fonction plus ( a , b : Entier ) : Entier
Début
Si ( b = 0 ) Alors
Retourner ( a )
Sinon
Retourner ( plus ( a + 1 , b - 1 ) )
FinSi
Fin

 plus(4,2)=plus(5,1)=plus(6,0)=6
20
Récursivité terminale
 Définition
 La récursivité n'est pas terminale si l'appel récursif n'est pas
la dernière instruction et/ou elle n'est pas isolée (elle fait
partie d'une expression).
 Exemple : Retour sur l'addition :
Fonction plus ( a , b : Entier ) : Entier
Début
Si ( b = 0 )
Retourner ( a )
Sinon
Retourner ( 1 + plus ( a , b - 1 ) )
FinSi
Fin
 plus(4,2)=1+plus(4,1)=1+1+plus(4,0)=1+1+4=6
21
Exercice
 Ecrire un Procédure qui permet d’afficher les entiers par
ordre croissant
 Ecrire un Procédure qui permet d’afficher entiers par ordre
croissant puis décroissant

22
Exercice
 Ecrire un Procédure qui permet d’afficher les entiers par
ordre croissant
 Définition
Procédure Croissant ( n : Entier )
Début
Si ( n > 0 ) Alors
Croissant ( n - 1 )
Ecrire( n )
FinSi
FinProcédure

23
Exercice: Ordre de l’appel
 La procédure elle se simplifie en :

Procédure Croissant ( n : Entier )


Début
Si ( n > 0 ) Alors
Ecrire( n )
Croissant ( n - 1 )
Ecrire( n )
FinSi
FinProcédure
24
Algorithme récursif

25
Récursivité
 Définition
 Un algorithme est dit récursif si l'expression qui le définit fait appel à lui-
même. On qualifiera de récursif, un appel à une fonction f provoqué par
l'évaluation d'un autre appel à f.
 Critères pour un bon algorithme récursif
 Règle 1 : Un algorithme récursif doit être défini par une expression
conditionnelle dont l'un au moins des cas mène à une expression
évaluable sans appel récursif.
 Une telle expression est appelée condition d'arrêt ou test
d'arrêt ou clause terminale ou cas de base ou encore cas
trivial.
 Règle 2 : Il faut s'assurer que pour toute valeur du (ou des)
paramètre(s), il suffira d'un nombre fini d'appels récursifs pour
atteindre la condition d'arrêt.

26
Récursivité
 Schéma général d'un algorithme récursif
Action R(données X ; résultats Y)
Début
si terminaison(X) alors
Y ...
sinon
...
R(entrée_réduite, ...)
...
Finsi
Fin
27
Récursivité multiple
 Schéma général d'une fonction récursive
Fonction F (a1 : T1 ; a2 : T2...) : T
var rs : T
Début
Si terminaison(a1, a2,...) alors
rs ...
Sinon
y1 ...
y2 ...
...
rs f(y1, y2, ...)
...
Finsi
Retourner(rs)
Fin
28
Exercice
 Affiche un entier sous la forme d’une suite de
ses chiffres de la droite vers la gauche puis de
la gauche vers la droite.
 Exemple d'exécution.
Votre entier? 12354
==> De droite à gauche
45321
==> De gauche à droite
12354
29
Exercice( Correction )
Procédure AfficherChiffreDG ( n : Entier )
Début
Si ( n > 0 ) Alors
Afficher ( Modulo ( n , 10 ) )
AfficherChiffreDG ( DivEnt ( n , 10 ) )
FinSi
Fin Procédure
Procédure AfficherChiffreGD ( n : Entier )
Début
Si ( n > 0 ) Alors
AfficherChiffreGD ( DivEnt ( n , 10 ) )
Afficher ( Modulo ( n , 10 ) )
FinSi
Fin Procédure
30
Exercice(Correction)
Algorithme pg_rcchiffresA
Variable n : Entier
Début
Afficher ( "Votre entier? " )
Saisir ( n )
Afficher ( "==> De droite à gauche " )
AfficherChiffreDG ( n )
Afficher ( "==> De gauche à droite " )
AfficherChiffreGD ( n )
Fin Action
31
Les tours de Hanoï

32
Problème
 Les tours de Hanoï est un jeu solitaire dont l'objectif est de déplacer
les disques qui se trouvent sur une tour (par exemple ici la première
tour, celle la plus à gauche) vers une autre tour (par exemple la
dernière, celle la plus à droite) en suivant les règles suivantes :
 On ne peut déplacer que le disque se trouvant au sommet d'une tour
 On ne peut déplacer qu'un seul disque À la fois
 Il est interdit de poser un disque sur un disque plus petit

33
Les tours de Hanoï
Problème

Problème :
Soit n tours de tailles décroissantes sur un socle A,
transférer les n tours sur le socle B en utilisant un socle
intermédiaire C.

Déplacement d’une tour : on ne peut empiler


qu’une tour de plus petite taille sur une autre tour

Tige A Tige B Tige C


Résolution
 Hypothèse
 On suppose que l'on sait résoudre le problème pour n disques.
 Principe
 Pour déplacer n disques de la tige A vers la tige C :
1) on déplace n-1 les plus petits de la tige A vers la tige B,
2) on déplace le plus gros disque de la tige A vers la tige C,
3) on déplace les n-1 plus petits de la tige B vers la tige C.
 Validité
 Les règles sont respectées puisque le plus gros disque est
toujours en « bas » d'une tige et que l'hypothèse (de
récurrence) nous assure que nous pouvons déplacer la « pile »
de disques en respectant les règle.

35
Résolution

Socle A Socle B Socle C

Socle A Socle B Socle C


Algorithme
 L'algorithme suivant déplace n disques de la tour orig(ine)
vers la tour dest(ination) en passant par la tour
inter(médiaire).
Procédure hanoi ( n : Entier ; orig , dest , inter : Chaîne )
Début
Si ( n > 0 ) Alors
hanoi ( n - 1 , orig , inter , dest )
deplacer ( orig , dest )
hanoi ( n - 1 , inter , dest , orig )
FinSi
Fin

37
Arbre des appels (n=3)
1
Hanoi (3,A,B,C)

2 8 9

Hanoi (2,A,C,B) Déplacer (A,B) Hanoi (2,C,B,A)

3 10
5 6
Déplacer (C,A)
Hanoi (1,A,B,C) Déplacer (A,C) Hanoi (1,B,C,A)
11
4 7 Déplacer (C,B)
Déplacer (A,B) Déplacer (B,C) 12
Déplacer (A,B)
Arbre des appels (n=3)
1) Déplacer le disque 1 de la tour 1 à la tour 3.
2) Déplacer le disque 2 de la tour 1 à la tour 2.
3) Déplacer le disque 1 de la tour 3 à la tour 2.
4) Déplacer le disque 3 de la tour 1 à la tour 3.
5) Déplacer le disque 1 de la tour 2 à la tour 1.
6) Déplacer le disque 2 de la tour 2 à la tour 3.
7) Déplacer le disque 1 de la tour 1 à la tour 3.
Exécution avec trois disques
 Résultat d'exécution (Avec trois disques)
 Nombre de disques? 3
1  deplacer de A sur C
2  deplacer de A sur B
3  deplacer de C sur B
4  deplacer de A sur C
5  deplacer de B sur A
6  deplacer de B sur C
7  deplacer de A sur C
40

Vous aimerez peut-être aussi