Vous êtes sur la page 1sur 10

Institut National des sciences appliquées et de Technologie

Filière: MPI

Algorithmique et structures de données II

1 27/01/2022
Plan du cours

Chapitre 1 : La récursivité

Chapitre 2 : Les listes

Chapitre 3 : Les piles et les files

Chapitre 4 : Les arbres

2 27/01/2022
Plan du cours

Chapitre 1 : La récursivité

3 27/01/2022
1-Définition
• Une définition récursive est une définition dans laquelle intervient ce que l’on veut
définir. Un algorithme est dit récursif lorsqu’il est défini en fonction de lui-même.

Exemple:
Factorielle (n)=n* Factorielle(n-1)
Cela est traduit par:

int Factorielle (int n)


{
return(n*Factorielle(n-1));
}

L’écriture de la fonction Factorielle est erronée.


Exécution de Factorielle(3)

4 27/01/2022
X=Factorielle(3)
return(3* Factorielle(2));
return(2*Factorielle(1));
return(1* Factorielle(0));
return(0*Factorielle(-1));
return(-1*Factorielle(-2));
………

L’appel de la fonction Factorielle se fait d’une manière infinie

Besoin d’une condition d’arrêt.

• Pour le cas de la fonction Factorielle, la condition d’arrêt est lorsque n


atteint la valeur 0

5 27/01/2022
int Factorielle (int n)
{ if n==0)
return(1);
else
return(n*Factorielle(n-1));
}

X=Factorielle(3)
return(3* Factorielle(2));
return(2*Factorielle(1));
return(1* Factorielle(0));
return(1);
1*1
2*1
3*2

6
6 27/01/2022
2-Syntaxe de récursion

if (condition d’arrêt)
Traitement solution condition arrêt
else
Appel récursif

7 27/01/2022
3- Quelques terminologies

• Une définition récursive peut contenir plus qu’un appel récursif.

Exemple:

1 si p  0 ou p  n
C np   p p 1
 C n1  C n1 sin on

• Des définitions sont dites mutuellement récursives si elles dépendent les


unes des autres

 vrai si n  0  faux si n  0
pair ( n)   et impair ( n)  
 impair ( n  1) sin on  pair ( n  1) sin on

8 27/01/2022
• Récursivité imbriquée

Exemple:
 n  1 si m  0

A( m , n)   A( m  1, 1)  si m  0 et n  0
 A( m  1, A( m , n  1)) sin on

• Un algorithme est dit récursif terminal s’il ne contient aucun traitement


après un appel récursif.

9 27/01/2022
4- Exemple
int puissance (int x, int n)
{
if (n==0)
return 1;
else return (x* puissance (x, n-1));
}
Exécution de puissance(3,3)

X=puissance(3,3)
return(3* puissance(3,2));
return(3*puissance(3,1));
return(3* puissance(3,0));
return(1);
3*1
3*3
3*9

27
10 27/01/2022

Vous aimerez peut-être aussi