Vous êtes sur la page 1sur 15

La récursivité

Pr. Mohamed EL ANSARI

Département d’Informatique
Faculté des Sciences, Université Ibn Zohr
Agadir

Filière: SMI4
Module: Algorithmes & Structures de données

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 1 / 15


Récursivité

En informatique, la récursivité est un des concepts de programmation


les plus importants.
Permet de résoudre des problèmes complexes en les décomposant en
problèmes plus petits
Une procédure (ou fonction) est dite récursive lorsqu’elle fait appel à
elle même.
C’est l’équivalent de la récurrence en mathématique.
La programmation récursive sert à remplacer les boucles (while, for,
etc).
Il faut vérifier si le processus ne boucle pas indéfiniment.
Une procédure ou fonction récursive peut s’appeler plusieurs fois.

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 2 / 15


Exemples

Factorielle
Par exemple, la fonction factorielle peut être définie sous forme
récursive de la manière suivante:
si n=0 alors factorielle(n)=1 sinon factorielle(n)=n*factorielle(n-1)
Lorsque n ≥ 1, il y a récursivité car la définition de factorielle(n) fait
appel à factorielle(n-1).

Suite de Fibonacci

 F (0) = 0
F (1) = 1
F (n) = F (n − 1) + F (n − 2), si n > 1

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 3 / 15


Exemple

Factorielle
fonction fact(N:Naturel):Naturel Programme en langage C
debut long fact(int N)
si N=0 alors {
retourner 1
if (N==0)
return 1;
sinon
else
retourner N*fact(N-1) return N*fact(N-1);
finsi }
fin

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 4 / 15


Récursivité terminale

Définition
Une définition de fonction f est récursive terminale quand tout appel récursif est de la forme
return f(...); La valeur retournée est directement la valeur obtenue par un appel récursif, sans
qu’il n’y ait aucune opération sur cette valeur.

somme(a,b)
function somme(a,b:Naturel):Naturel
debut
si b=0 alors
retourner a
sinon
retourner somme(a+1,b-1)
finsi
end

somme(4,2)=somme(5,1)=somme(6,0)=6
Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 5 / 15
Récursivité non terminale

Définition
L’appel récursif n’est pas la dernière instruction et/ou elle n’est pas isolée
(fait partie d’une expression).

somme(a,b)
function somme(a,b:Naturel):Naturel
debut
si b=0 alors
retourner a
sinon
retourner 1+somme(a,b-1)
finsi
end

somme(4,2)=1+somme(4,1)=1+1+somme(4,0)=1+1+4=6

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 6 / 15


La recette de récursivité

S’assurer que le problème peut se décomposer en un ou plusieurs


sous-problèmes de même nature.
Identifier le cas de base qui est le plus petit problème qui ne se
décompose pas en sous-problèmes
Résoudre(P) =
si P est un cas de base, le résoudre directement
sinon
décomposer P en sous-problèmes P1, P2,...
résoudre récursivement P1, P2,...
combiner les résultats pour obtenir la solution pour P

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 7 / 15


Les tours de Hanoı̈

Présentation

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 ;
un disque ne peut pas être posé sur un disque plus petit.

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 8 / 15


Les tours de Hanoı̈

Opérations disponibles
procédure dépilerTour ( E/S t : TourDeHanoi , S d : Disque )
procédure empilerTour ( E/S t : TourDeHanoi , E d : Disque )

Objectif
procédure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel ,
E/S source, destination, intermediaire : TourDeHanoi )

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 9 / 15


Les tours de Hanoı̈
Analyse du problème

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 10 / 15


Les tours de Hanoı̈
Solution

Fonction récursive
procédure resoudreToursDeHanoi ( E nbDisquesADeplacer : Naturel , E/S source,
destination, intermediaire : TourDeHanoi )
Déclaration d : Disque
debut
si nbDisquesADeplacer= 1 alors
depiler(source,d)
empiler(destination,d)
sinon
resoudreToursDeHanoi(nbDisquesADeplacer-1, source, intermediaire,
destination)
depiler(source,d)
empiler(destination,d)
resoudreToursDeHanoi(nbDisquesADeplacer-1, intermediaire,
destination, source)
finsi
fin

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 11 / 15


Suite récurrente

Suite récurrente
q
1+un
Soit u la suite définie par u0 = 0 et ∀n ∈ N, un+1 = 2 .
1 Écrire la fonction récursive qui renvoie la valeur de un .
2 Réécrire cette même fonction sous forme non récursive (forme dite
itérative).

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 12 / 15


Exponentiation rapide

Exponentiation rapide
Écrire la fonction récursive qui renvoie la valeur de x n avec la méthode
suivante :
Si n est pair alors on élève x n/2 au carré.
2
Sinon on calcule x ∗ x (n−1)/2

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 13 / 15


Dangers et précautions

1 Dépassement de capacité
Tentative de stocker un nombre plus grand que ce que peut contenir le
type de votre variable.
Choisir un type approprié
Exemple, pour le calcul des factoriels: utiliser long au lieu de int.
2 Débordement de pile (stack overflow)
Appels récursifs sont placés dans la pile du programme.
La taille de pile est assez limitée et fixée tout au long du programme
Grande taille de données → débordement de la pile → sortie anormale
du programme.

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 14 / 15


Conclusion

Les algortihmes récursifs permettent de résoudre des problèmes


complexes.
Il est sain de ramener un problème à des sous-problèmes.
La récursivité permet de ramener un problème à un sous-problème qui
est le problème lui-même avec des données plus simples.
Les algorithmes récursifs sont le plus souvent plus gourmands en
ressource que leurs équivalents itératifs.

Pr. Mohamed EL ANSARI (FS-Agadir) La récursivité 15 / 15

Vous aimerez peut-être aussi