Vous êtes sur la page 1sur 16

La récursivité

ELGARGOUR Achraf

Lycée Moulay Al Hassan - Tanger


MPSI-PCSI
achrafelgargour@gmail.com

20 janvier 2022
Introduction définition types de récursivité

Introduction

Nous allons aborder une notion d’algorithmique importante : la récursivité.


Ceux qui mènent (ou ont mené) des études scientifiques devraient être
familiarisés avec un terme similaire : la « récurrence » ! Mais il n’y a pas
d’erreur, la récursivité est une notion très proche du raisonnement par
récurrence vu au lycée.

1/11

La récursivité
Introduction définition types de récursivité

Définition 1
On appelle fonction récursive toute fonction qui fait appel à elle même soit
directement ou indirectement.
Afin de s’arrêter, une fonction récursive doit obligatoirement contenir au
moins un cas de base, c’est à dire des valeurs particulières de ses arguments
pour lesquelles il n’y a aucun appel récursif, mais un traitement particulier
qui assure la terminaison.

2/11

La récursivité
Introduction définition types de récursivité

Syntaxe générale :
1 def f o n c ti o n_ r ec u rs i ve ( ... ) :
2 if c o n d i t i o n _ d e _ b a s e _ v e r i f i e e :
3 cas_de_base
4 else :
5 instructions ()
6 f on c ti o n_ r ec u rs i v e ( ... )

3/11

La récursivité
Introduction définition types de récursivité

Exemple : la factorielle
La factorielle d’un nombre n donné est le produit des nombres entiers
inférieurs ou égaux à ce nombre n. On peut définir d’une manière récurrente
comme suit :

0! = 1
n! = n ∗ (n − 1)! si n > 0

4/11

La récursivité
Introduction définition types de récursivité

Exemple : la factorielle
La factorielle d’un nombre n donné est le produit des nombres entiers
inférieurs ou égaux à ce nombre n. On peut définir d’une manière récurrente
comme suit :

0! = 1
n! = n ∗ (n − 1)! si n > 0

1 def factorielle ( n ) :
2 if n ==0:
3 return 1
4 else :
5 return n * factorielle (n -1)

4/11

La récursivité
Introduction définition types de récursivité

Comment ça marche ?

1 Appel de factorielle (4)


2 4* factorielle (3) = ?
3 Appel de factorielle (3)
4 3* factorielle (2) = ?
5 Appel de factorielle (2)
6 2* factorielle (1) = ?
7 Appel de factorielle (1)
8 1* factorielle (0) = ?
9 Appel de factorielle (0)
10 Retour de la valeur 1
11 1*1
12 Retour de la valeur 1
13 2*1
14 Retour de la valeur 2
15 3*2
16 Retour de la valeur 6
17 4*6
18 retour de la valeur 24

5/11

La récursivité
Introduction définition types de récursivité

Fonctionnement :
Quand on appelle une fonction récursive, cette dernière est en fait appelée à
plusieurs reprises. Pour gérer un programme ou plusieurs fonctions sont
appelées, l’interpréteur utilise une pile d’exécution. Il y emmagasine des
valeurs et des adresses permettant de garder la trace de l’endroit ou chaque
fonction active doit retourner à la fin de son exécution.

6/11

La récursivité
Introduction définition types de récursivité

Remarques :

L’emploi de fonctions récursives comporte le risque d’un nombre


d’appels illimité de la fonction par elle-même, ne fournissant ainsi
jamais de résultat ou bien encore exécutant des instructions jusqu’à ce
que la mémoire soit saturée (par les copies, notamment, des variables
internes). La présence d’au moins un test d’arrêt dans le corps d’une
fonction récursives est indispensable ainsi que la vérification que le
fonction « converge » vers la condition d’arrêt.
Dans de très nombreux cas, l’écriture récursive d’une fonction est plus
aisée que l’écriture itérative, même si celle-ci est toujours possible,
surtout lorsque la fonction doit opérer sur des structures de données
elles-mêmes récursives.

7/11

La récursivité
Introduction définition types de récursivité

récursivité simple

La récursivité simple correspond au cas le plus classique pour lequel la


fonction récursive ne fait qu’un seul appel à elle-même lors de chaque étape
de récurrence.
Exemple : (voir l’exemple précédent de la factorielle)

8/11

La récursivité
Introduction définition types de récursivité

récursivité multiple

La récursivité multiple correspond au cas d’une fonction récursive faisant


plus d’un appel à elle-même lors de chaque étape de récurrence.
Exemple : suite de Fibonacci
la suite de Fibonacci est définit comme suit :

fibo(n) = 1 si n = 0 ou n = 1
fibo(n) = fibo(n − 1) + fibo(n − 2) si n > 1

9/11

La récursivité
Introduction définition types de récursivité

récursivité multiple

La récursivité multiple correspond au cas d’une fonction récursive faisant


plus d’un appel à elle-même lors de chaque étape de récurrence.
Exemple : suite de Fibonacci
la suite de Fibonacci est définit comme suit :

fibo(n) = 1 si n = 0 ou n = 1
fibo(n) = fibo(n − 1) + fibo(n − 2) si n > 1

1 def fibo ( n ) :
2 if n ==0 or n ==1:
3 return 1
4 else :
5 return fibo (n -1) + fibo (n -2)

9/11

La récursivité
Introduction définition types de récursivité

récursivité imbriquée

La récursivité imbriquée correspond au cas d’une fonction récursive dont


l’un des paramètres est un appel à la fonction elle-même.
Exemple 3 : fonction d’Ackermann-Peter
La fonction d’Ackermann-Peter est définie récursivement comme suit :


 Ackermann(m, n) = n + 1 si m = 0
Ackermann(m, n) = Ackermann(m − 1, 1) si m > 0 et n = 0
Ackermann(m, n) = Ackermann(m − 1, Ackermann(m, n − 1)) si m > 0 et n > 0

10/11

La récursivité
Introduction définition types de récursivité

récursivité imbriquée

La récursivité imbriquée correspond au cas d’une fonction récursive dont


l’un des paramètres est un appel à la fonction elle-même.
Exemple 3 : fonction d’Ackermann-Peter
La fonction d’Ackermann-Peter est définie récursivement comme suit :


 Ackermann(m, n) = n + 1 si m = 0
Ackermann(m, n) = Ackermann(m − 1, 1) si m > 0 et n = 0
Ackermann(m, n) = Ackermann(m − 1, Ackermann(m, n − 1)) si m > 0 et n > 0

1 def Ackermann (m , n ) :
2 if m ==0:
3 return n +1
4 elif n ==0:
5 return Ackermann (m -1 ,1)
6 else :
7 return Ackermann (m -1 , Ackermann (m ,n -1) )
10/11

La récursivité
Introduction définition types de récursivité

récursivité croisée

Deux fonctions récursives(ou plusieurs) sont dites mutuellement récursives


lorsqu’elles s’appellent l’une l’autre. On parle alors de récursivité croisée.
Exemple : la parité

 
paire(0) = vrai impaire(0) = faux
paire(n) = impaire(n − 1) si n > 0 impaire(n) = paire(n − 1) si n > 0

11/11

La récursivité
Introduction définition types de récursivité

récursivité croisée

Deux fonctions récursives(ou plusieurs) sont dites mutuellement récursives


lorsqu’elles s’appellent l’une l’autre. On parle alors de récursivité croisée.
Exemple : la parité

 
paire(0) = vrai impaire(0) = faux
paire(n) = impaire(n − 1) si n > 0 impaire(n) = paire(n − 1) si n > 0

1 def paire ( n ) :
2 if n ==0:
3 return True
4 else :
5 return impaire (n -1)
6
7 def impaire ( n ) :
8 if n ==0:
9 return False
10 else :
11 return paire (n -1)

11/11

La récursivité

Vous aimerez peut-être aussi