You are on page 1of 12

Algorithmes récursifs

Définition:

La récursivité est le fait pour une méthode de s'appeler elle même. On parle
alors de méthode récursive.

1
Algorithmes récursifs

2
Principe de la récursivité

 Décomposer le problème en un problème plus simple

 réduire la taille du problème considéré.

 Pour la récursion sur des entiers : la taille du problème est définie par un entier, on réduit
la valeur de cet entier à chaque appel récursif.

 Pour la récursion sur les tableaux :

Soit on considère la taille du tableau, on réduit la taille du tableau considéré à chaque


appel récursif

Ou bien on utilise un ou des indices qui varient à chaque appel pour tendre vers la
condition d'arrêt (dépendant des valeurs des indices).

3
Définir une fonction récursive

 Une fonction récursive est définie par :

 au moins un cas de base et,

 au moins un cas général.

 Cas de base : on décrit les cas pour lesquels le résultat de la fonction est simple à calculer :
la valeur retournée par la fonction est directement définie.

 Cas général : la fonction est appelée récursivement et le résultat retourné est calculé en
utilisant le résultat de l'appel récursif. A chaque appel récursif, la valeur d'au moins un des
paramètres (effectifs) de la fonction doit changer.
NB: Il faut toujours s'assurer que chaque cas général converge vers un cas de base.

4
Définir une fonction récursive exemple:

5
Définir une fonction récursive exemple:

Fonction Factorielle(n: entier): entier;


var
résultat: entier;
Début
Si(n<0) Alors
résultat := 0;
Sinon
Si((n = 1) OU (n = 0)) Alors résultat := 1;
Sinon
résultat := n * Factorielle(n-1);
FinSi
FinSi
Retourner résultat ;

Fin

6
Définir une fonction récursive exemple:

7
Définir une fonction récursive exemple 2:

Écrire le programme qui calcule le plus grand commun dénominateur (pgcd)


de deux entiers a et b.
Méthode des différences :
Si a et b sont multiples de d alors a - b également.
Réciproquement, si d divise b et a-b alors il divise également
(a - b) + b = a.
Calcul du pgcd :
pgcd(a, 0) = a
pgcd(0, b) = b
pgcd(a, b)= pgcd(a, b-a) si a < b
pgcd(a, b) = pgcd(a-b, b) sinon
8
Solution exemple 2 pgcd( b, a):

 2 cas de base :
 Si a == 0 alors pgcd(b,a) = b
 Si b == 0 alors pgcd(b,a) = a
 2 cas généraux :
 Si b < a alors pgcd(b, a)= pgcd(b, a-b)
 Sinon pgcd(b, a) = pgcd(b-a,a)

pgcd ( b: entier , a: entier ) : entier; {


i f ( a == 0) return b ; i f ( b == 0) return a ;
if(b<a) return pgcd( b , a-b ) ;
return pgcd( b-a , a ) ;
9
}
Récursivité multiple

La fonction contient plus qu’un appel récursif dans son corps.


Exemple 1: Calcul du nombre de combinaisons en se servant de la relation de Pascal:

Exemple 2: Suite de Fibonacci


La suite de Fibonacci est une suite d'entiers dans laquelle chaque terme est la somme
des deux termes qui le précèdent :
U0 = 1 U1 = 1
Un = Un-1 + Un-2 pour n > 1 10
Récursivité imbriquée

Ça consiste à faire un appel récursif à l’intérieur d’un autre appel récursif.


Exemple: La fonction d’Ackermann.

11
Récursivité indirecte ou mutuelle

Deux algorithmes sont mutuellement récursifs si elles dépendent les unes des autres.

Exemple 1: Fonction U(n: entier):entier Fonction V(n: entier):entier


U(0) = 1, V(0) = 2 { si(n = 0) alors { if(n = 0)
U(n) = 2*V(n-1), si n>0 return 1; return 2;
V(n) = 3*U(n-1), si n>0 sinon sinon
return 2*V(n-1); return 3*U(n-1);
} }

Exemple 2: Ça peut être le cas pour la définition de la parité :


PAIR (n) { si (n = 0) alors return true
sinon return IMPAIR (n − 1)

IMPAIR (n) { si (n =0) return false


sinon return PAIR (n − 1)
12

You might also like