Vous êtes sur la page 1sur 11

Algorithmique et structure de données II La récursivité

Plan du Cours
 Notion de récursivité
 La récursivité est une technique de programmation alternatives à
• La récursivité l’itération qui permet de trouver, lorsqu’elle est bien utilisée, des
solutions très élégantes à un certain nombre de problèmes.
• Les enregistrements
 Une procédure ou fonction est dite récursive si son corps contient
• Les pointeurs un ou plusieurs appels à elle-même:

• Les listes chainées (Pile, File)


procédure Rec (paramètres)
• Les arbres (A, AB, ABR, AVL) Debut
………..
Rec()
………..
fin

page 1 ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 2 Enseignant : Soufien GDAIM

La récursivité La récursivité : exemple 1 : Somme


 Ecrire une fonction nommée Somme permettant de calculer
 Utiliser la récursivité revient à définir la somme de N premiers entiers.
 La fonction Somme peut être définie comme suit :
 Une solution pour un ensemble de cas de base (sans utiliser
Somme (n) = n + (n-1) + (n-2) +… + 2 + 1
d’appels récursifs).
Somme (n-1) = (n-1) + (n-2) + .... + 2 + 1
 Une ou plusieurs conditions d’arrêt afin d’éviter le risque ..........................
d’une récursion infinie. Cette condition est appelée "point Somme (2) = 2 + 1
terminal" ou "point d'appui" ou "valeur de base". Somme (1) = 1
 Une solution dans le cas général à travers une relation de  D’une façon générale :
référence avec des cas plus simples. Somme (n) = n + Somme (n-1)
 Cette relation doit permettre d’arriver à un cas de base en un Exemple : Somme (4) = 4 + Somme(3)
nombre fini d’étapes. = 4 + 3 + Somme (2)
= 4 + 3 + 2 + Somme (1)
=4+3+2+1
= 10

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 3 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 4 Enseignant : Soufien GDAIM
La récursivité : exemple 1 : Somme La récursivité : exemple 2 : Factorielle

 La fonction Somme  La fonction factorielle

 Solution itérative  Solution récursive  Solution itérative  Solution récursive


Som_it (n) = 1+2+3+…..+n Som_rec (1) = 1 n! = 1*2*3*……..*(n-1)*n 1! = 1
Som_rec(n) = n + Som_rec(n-1) n! = n * (n-1)!
fonction Som_it (n:entier) : entier fonction Fact (n : entier) : entier
var var fonction Fact (n : entier) : entier
fonction Som_rec (n:entier): entier
i, f : entier i, f : entier début
début
début début si (n = 1) alors
si (n = 1) alors
s 0 f 1 Fact  1
Som_rec  1
pour i de 1 à n faire pour i de 2 à n faire sinon
sinon
s s+i f f*i Fact  n * Fact (n - 1)
Som_rec  n+Som_rec (n-1)
fin pour fin pour finsi
finsi
Som_it  s Fact  f fin
fin
fin fin

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 5 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 6 Enseignant : Soufien GDAIM

La récursivité : exemple 2 : Factorielle Les types de récursivité

 Mécanisme de fonctionnement de la récursivité  Récursivité simple


Considérons le calcul de 4! par la fonction récursive définie par  Une procédure ou fonction est dite récursive simple si son
corps contient un appel à elle-même.
 Exemple : La fonction puissance xn, peut être définie
fonction Fact (n : entier) : entier Fact (4) = 4 * Fact(3) récursivement
début = 4 * 3 * Fact(2)
si (n = 1) alors = 4 * 3 * 2 * Fact(1)
Fact  1
sinon
=4*3*2*1
 1 si n  0
Fact  n * Fact (n - 1)
= 24 xn   n 1
x * x si n  1
finsi
fin

 Donner son code

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 7 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 8 Enseignant : Soufien GDAIM
Les types de récursivité Les types de récursivité

Récursivité multiple Récursivité imbriquée


 Lorsqu'un sous-programme récursif réalise plusieurs appels à  Lorsqu'un sous-programme récursif dont l’appel à lui même
lui même, on parle de récursivité multiple. contient un autre appel à lui même, on parle de récursivité
 Exemple : Calculer les combinaisons Cnp en se servant de la imbriquée.
relation de Pascal  Exemple : La fonction d’Ackermann est définie comme suit :

 1 si p  0 ou p  n
Cnp   p p 1
n  1 si m  0
Cn 1  Cn 1 sin on 
A(m, n)   A(m  1,1) si m  0 et n  0
 A(m  1, A(m, n  1)) sin on

 Donner son code
 Donner son code

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 9 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 10 Enseignant : Soufien GDAIM

Les types de récursivité Les types de récursivité

Récursivité mutuelle (croisée) Exemple 2 : soient les deux suites récurrentes suivantes :
 Des définitions sont dites mutuellement récursives si elles
dépendent les unes des autres. U0= -1 V0= 1

 Exemple : Ça peut être le cas pour la définition de la parité : Un=2 * Vn + 5 Vn=2 * Un-1 + 3

 vrai si n  0 Ecrire deux fonctions récursives qui permettent de définir les deux suites
pair (n)   U et V
impair (n  1) sin on

 faux si n  0
impair (n)  
 pair (n  1) sin on
 Donner leurs codes

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 11 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 12 Enseignant : Soufien GDAIM
La récursivité La récursivité

 Performance de la récursivité  La fonction Fibonacci


 Les problèmes de mémoire et de rapidité sont les critères qui
permettent de faire le choix entre la solution itérative et la solution  Solution récursive
récursive.
On remarque que la fonction
 Pour le calcul de la fonction factorielle, les différences entre les fonction Fibo (n : entier) : entier effectue deux appels, donc pour
deux solutions ne se voient pas trop. début les valeurs importantes de n on
 Le calcul de la suite de Fibonacci est le parfais contre-exemple si (n = 0) ou (n = 1) alors aura des temps d’exécution
de la solution récursive. Fibo  1 importants (attente du résultat).
sinon
 La relation de récurrence est définie par:
Fibo  Fibo (n-2) + Fibo(n-1)
f0=1
finsi
f1=1
fin
fn= fn-2+ fn-1

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 13 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 14 Enseignant : Soufien GDAIM

La récursivité La récursivité

A titre d’exemple, voici le schéma de calcul de Fibo(4):


 La solution itérative de la suite de Fibonacci (simple)
Fibo(4)
fonction Fibo (n : entier) : entier
var i, fn, f0,f1 : entier
Fibo(3) Fibo(2) début
f0  1
f1  1
Fibo(2) Fibo(1) Fibo(1) Fibo(0) pour i de 2 à n faire
fn  f0 + f1
f0  f1
Fibo(1) Fibo(0)
Le nombre d’appels f1  fn
- 9 pour Fibo(4), fin pour
- 15 pour Fibo(5), Fibo  fn
fin
- 25 pour Fibo(6),
- 21891 pour Fibo (20).
ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 15 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 16 Enseignant : Soufien GDAIM
La récursivité La récursivité

Les Tours de Hanoï (TH)


 Choix entre itérative et récursive
 Le choix de la solution itérative peut être imposé par le langage de  3 axes, n disques concentriques de taille différente
programmation. En effet, certain langages tels que Cobol et Basic
ne sont pas récursifs
 D’autre part, seuls les problèmes dont la solution se base sur une n
relation de récurrence avec une condition de sortie peuvent être
résolus de façon récursive.
G(auche) M(ilieu) D(roite)
 Le choix doit être fait uniquement en fonction des critères  But : déplacer tous les disques de G à D
d’efficacité (contraintes de temps et d’espace).
 Règles :
 Si la solution récursive satisfait ces critères, il n’y a pas lieu  1 seul disque peut être déplacé à la fois
de chercher systématiquement une solution itérative.  1 disque ne peut jamais être déposé sur un plus petit
 1 disque ne peut être déposé que sur G, M ou D
ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 17 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 18 Enseignant : Soufien GDAIM

La récursivité La récursivité

TH : idée de la solution récursive


 exprimer le problème des n disques à l’aide de la
même solution sur n-1 disques
 (base) savoir résoudre le problème pour 1 disque
Équations de récurrence

G(auche) M(ilieu) D(roite)

(n=2)
G(auche) M(ilieu) D(roite)
(n=1)

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 19 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 20 Enseignant : Soufien GDAIM
La récursivité La récursivité

G(auche) M(ilieu) D(roite) G(auche) M(ilieu) D(roite)

(n=2) (n=2)

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 21 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 22 Enseignant : Soufien GDAIM

La récursivité La récursivité

G(auche) M(ilieu) D(roite)


G(auche) M(ilieu) D(roite) (n=3)
(n=2)
Récurrence :
Hypothèse: on connaît la solution pour n-1 disques
Trouver la solution pour n disques

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 23 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 24 Enseignant : Soufien GDAIM
La récursivité La récursivité

G(auche) M(ilieu) D(roite) G(auche) M(ilieu) D(roite)

(n=3) (n=3)

Récurrence : Récurrence :
Hypothèse: on connaît la solution pour n-1 disques Hypothèse: on connaît la solution pour n-1 disques
Trouver la solution pour n disques Trouver la solution pour n disques

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 25 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 26 Enseignant : Soufien GDAIM

La récursivité La récursivité

G(auche) M(ilieu) D(roite) G(auche) M(ilieu) D(roite)

(n=3) (n=3)

Récurrence : Récurrence :
Hypothèse: on connaît la solution pour n-1 disques Hypothèse: on connaît la solution pour n-1 disques
Trouver la solution pour n disques Trouver la solution pour n disques

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 27 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 28 Enseignant : Soufien GDAIM
La récursivité La récursivité

G(auche) M(ilieu) D(roite) G(auche) M(ilieu) D(roite)

(n=3) (n=3)

Récurrence : Récurrence :
Hypothèse: on connaît la solution pour n-1 disques Hypothèse: on connaît la solution pour n-1 disques
Trouver la solution pour n disques Trouver la solution pour n disques

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 29 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 30 Enseignant : Soufien GDAIM

La récursivité La récursivité

n-1 3(hypo)
1(hypo)
n 2

G(auche) M(ilieu) D(roite)


G(auche) M(ilieu) D(roite)
Solution
(n=3) procédure déplacer(n, G, M, D)
" déplacer n disques de G vers D en utilisant l’axe M "
(Base) n=1, déplacer un disque de G vers D
Récurrence : (récurrence)
Hypothèse: on connaît la solution pour n-1 disques • déplacer(n-1, G, D, M)
Trouver la solution pour n disques • déplacer un disque de G vers D
• déplacer(n-1, M, G, D)
ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 31 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 32 Enseignant : Soufien GDAIM
La récursivité La récursivité : déroulement de l’appel récursif

Module récursive
procedure deplacer ( n:entier; G, M, D:caratere)
debut
si(n=1) //cas de base
ecrire ( "déplacer le disque de G vers D " ); Module récursive

sinon //récursivité
deplacer(n-1, G, D, M);
deplacer(1, G, M, D);
deplacer(n-1, M, G, D);
Finsi.
Module récursive
Module récursive

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 33 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 34 Enseignant : Soufien GDAIM

La récursivité La récursivité

 Exercices: Ecrire un module récursive qui permet de :


 Conclusion
1. Calculer le produit des n premiers nombres  La récursivité est un principe puissant nous permettant :
2. Ecrire une fonction récursive nommée Somme_Chiffre qui  de définir des structures de données complexes
retourne la somme des chiffres d’un nombre N donné.  de simplifier les algorithmes opérants sur ces structures de
données
Exemple : si N= 327  le résultat retourné est : 3+2+7=12
 Pour certains problèmes, une solution itérative est
3. Affichage des n premiers nombres entier dans l’ordre
préférable à une solution récursive
décroissant.
 Il est possible de transformer un algorithme récursif en un
4. Affichage des n premiers nombres entier dans l’ordre algorithme itératif. On dit "dérécursiver" l’algorithme
croissant.
5. Affichage des nombres de A a B.

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 35 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 36 Enseignant : Soufien GDAIM
Exercices La somme des n premiers entiers

 Exercices
 Som(n) calcule la somme des n premiers naturels Itératif : Som (n) = 0+ 1 + 2 + ... + n Récursif : Som(0)=0
 Som(a,b) calcule la somme des entiers a et b Som (n) = n + Som (n-1)
 Prod(a,b) calcule le produit des entiers a et b Som(n: entier): entier Som(n: entier): entier
 Puiss(a,b) calcule a puissance b Début Début
S0; Si n = 0 alors
Pouri de 1 à n faire retourner(0)
SS+i; Sinon
retourner S; retourner (Som(n-1) +n)
Fin Fin

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 37 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 38 Enseignant : Soufien GDAIM

La somme de deux entiers a et b Le produit de deux entiers a et b

1ère solution: a+0=a 2ème solution: 0+b=b 1ère solution: a*b = a*(b-1)+a 2ème solution: a*b = (a-1)*b+b
a+b = a+(b-1)+1 a+b = (a-1)+b+1

Som(a,b: entier): entier Som(a,b: entier): entier Prod(a,b: entier): entier Prod(a,b: entier): entier
Début Début Début Début
Si b = 0 alors Si a = 0 alors Si a = 0 ou b = 0 alors Si a = 0 ou b = 0 alors
retourner(a) retourner(b) retourner(0) retourner(0)
Sinon Sinon Sinon Sinon
retourner (Som(a, b-1) +1) retourner (Som(a-1, b) +1) retourner (Prod(a, b-1) +a) retourner (Prod(a-1, b) +b)
Fin Fin Fin Fin

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 39 Enseignant : Soufien GDAIM ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 40 Enseignant : Soufien GDAIM
La puissance ab (a et b deux entiers positifs)

Itératif : ab= a*a*a*......*a, b fois Récursif : a0=1


ab= ab-1* a

Puiss(a,b: entier): entier


Puiss(a,b: entier): entier
Début
Début
P1;
Si b = 0 alors
Pour i de1 à b faire
retourner(1)
PP*a;
Sinon
Fin pour
retourner (Puiss(a, b-1) *a)
retourner (P);
Fin
Fin

ISIMA 2019-2020 - LBC1-LCE1- Algorithmique et structure de données II page 41 Enseignant : Soufien GDAIM

Vous aimerez peut-être aussi