2. 1. Définition
• Une procédure (ou une fonction) est dite récursive si elle comporte un appel à elle
même. Une procédure non récursive ne peut comporter que des appels à d’autres
procédures.
Exemple : On peut définir le factoriel d'un nombre «n» positif de deux manières:
▪ définition non récursive (ou itérative)
▪ définition récursive
n ! = n * (n-1)!
// cette fonction renvoie n! (n est supposé supérieur ou égal à 0)
fonction factorielle(entier n): entier
début
retourne n*factorielle(n-1);
fin
n ! = n *n-1*n-2*…….*2*1
4. Point d’arrêt
• Puisqu'une fonction récursive s'appelle elle-même, il est impératif
qu'on prévoit une condition d'arrêt (ou point d’arrêt) à la récursion,
sinon le programme ne s'arrête jamais!
• On doit toujours tester en premier la condition d'arrêt, et ensuite, si
la condition n'est pas vérifiée, lancer un appel récursif.
• Exemple de la factorielle : si n ≠ 0, n! = n x (n-1)!, sinon n! = 1.
n ! = n * (n-1)! //appel récursif
et 0 ! = 1 // point d’arrêt
7. Activité 1:
• Pour chacune des fonctions suivantes, l’exécuter à la main sur un
exemple, justifier si elle termine ou non en général et si oui dire ce
quelle fait ou calcule
7
//f1 est appelée pour n>=0
fonction f1 (entier n): entier
Début
si (n = 0) alors
retourne 1
sinon
retourne f1(n+1)
finsi
fin
8. 8
//f2 est appelée pour n<0
fonction f2 (entier n): entier
Var res : entier
Début
si (n = 0) alors
retourne 0
Sinon
res f2(n-1)
res res+n
retourne res
finsi
fin
9. 9
//f3 est appelée pour n>=0
fonction f3 (entier n): entier
Début
si (n <= 1) alors
retourne 1
Sinon
retourne
1+f3(n-2)
finsi
fin
10. Récursivité directe/croisée
• Un algorithme est dit récursif :
• lorsqu’il s’appelle lui-même dans sa définition :récursivité directe
• lorsqu’il s’appelle par l’intermédiaire d’autres algorithmes appelés par
lui-même :récursivité indirecte ou croisée
11. Récursivité directe/croisée
Récursivité directe:
• dans le cas d’une récursivité directe (ou simple), l'appel récursif d'un
sous-algorithme P se fait dans le sous-algorithme P lui-même :
Sous_Algorithme P ( )
. . .
DEBUT
. . .
P // appel récursif direct de P dans le corps de P
. . .
FIN
12. Récursivité directe/croisée
Récursivité croisée:
• Dans le cas d’une récursivité croisée, l'appel récursif d'un sous programme P se
fait dans le corps d'un ou de plusieurs sous-programmes appelés par P.
• La procédure P utilise pour sa définition la procédure Q qui, elle-même, utilise P .
• Exemple: La parité d’un entier naturel n peut être définie par :
13. Récursivité directe/croisée
• Les algorithmes correspondants s’écrivent :
Fonction PAIR (n : entier) : booléen
VAR
L : booléen
DEBUT
SI n = 0 alors L vrai
SINON L IMPAIR (n−1)
FIN SI
Retourne L
FIN PAIR
Fonction IMPAIR (n : entier) : booléen
VAR
L : booléen
DEBUT
SI n = 0 alors L faux
SINON L PAIR (n−1)
FIN SI
Retourne L
FIN IMPAIR
15. Schéma général d’une fonction récursive
Fonction F (a1 : T1…) : T
VAR
rs: T
DEBUT
SI (test_Arret) alors
rs …..
SINON
instructions
rs ……F(y1…)
instructions
FIN SI
Retourner (rs)
FIN
16. Activité 2:
• Ecrire un sous-programme récursif qui calcule la somme des n
premiers nombres positifs
• Indication:
➢Somme(n)=n + somme(n-1)
➢Somme(1)=1
• Faire le tournage à la main pour n=4
16
19. Activité 3:
Soit la procédure suivante :
Transformer cette procédure en une procédure récursive.
Procédure COMPTER ()
VAR
i: entier
Début
Pour i de 1 à 10 faire
Ecrire (i)
FinPour
Fin
20. Activité 3:
• Cette procédure peut être traduite en une procédure récursive avec
un paramètre entier;
l'instruction qui l'appellera dans l’algorithme sera compter(1)
Procédure COMPTER (i: entier)
VAR
Début
si (i <=10) alors
Ecrire(i)
COMPTER(i + 1)
Finsi
Fin
21. Activité 4:
• Ecrire un sous-programme récursif qui calcule la somme des n
premiers carrés (n>0). Par exemple, si n vaut 4, ce sous-programme
calculera 12 + 22 + 32 + 42
• Faire le tournage à la main de cet exemple
21
22. Activité 5:
• Ecrire un sous-programme récursif qui calcule la somme des éléments
positifs d’un tableau.
22