3. Objectif du chapitre
3
Dr. Fadoua.BOUAFIF
A la fin du chapitre, les étudiants seront en mesure
de définir une fonction récursive afin de facilité la
manipulation d’un problème donné
4. Plan du chapitre
1. Introduction
2. Exemple introductive
3. Définitions
4. Avantages et inconvénients
5. Types de récursivité
6. Exercice d’application
7. Conclusion
2
Dr. Fadoua.BOUAFIF 4
5. Introduction
Dans la résolution d'un problème, ilarrive parfoisde répéter la même action.
Deux méthodes : la méthode itérative et la méthode récursive.
3
La méthode récursive est construite autour
d'une même fonction qui s'auto-appelle
jusqu'à atteindre la solution finale.
La méthode itérative se base sur la notion de boucles:
une même action est répétée un nombre fini de fois
(Pour/Répéter..jusqu’à/Tantque…faire,for/do…While/while).
La récursivité est donc une autre manière d’écrire des boucles sans l’utilisation
des structures de contrôle répétitives
Dr. Fadoua.BOUAFIF 5
6. 8
Exemple introductive
Exemple: calculer le factoriel d’un entier n positif.
Principe :
On sait que:
n! = n*(n-1)*(n-2)*….*1
n!=n*(n-1)!
(n-1)! = (n-1)*(n-2)!
…
0! =1 // condition d'arrêt
Méthode itérative Méthoderécursive
Dr. Fadoua.BOUAFIF 6
7. Exemple introductive
En algorithmique
Fonction fact(n:entier):entier
var f:entier
Debut
f1
tantque (n>0) faire
ff*n
nn-1
fintanque
retourne(f)
Fin
Méthode itérative Méthode récursive
fonction fact(n : entier ) : entier
debut
si (n == 0) alors // condition d'arrêt
retourne (1)
sinon
retourne (n × fact(n − 1)) // appel récursif
fin si
fin
Dr. Fadoua.BOUAFIF 7
8. ASDII
Exemple introductive
En C
int fact(int n )
{
int f;
f=1;
while (n>0)
{
f=f*n;
n=n-1;
}
return(f);
}
Méthode itérative Méthode récursive
int fact(int n)
{
if (n ==0) // condition d'arrêt
return(1);
else
return (n× fact(n −1)); // appelrécursif
}
Dr. Fadoua.BOUAFIF 8
9. Calculer 3! Fact (3)
{
if (3==0) return 1;
return (3*Fact(2));
}
Fact (2)
{
if (2==0) return 1;
return (2*Fact (1));
}
Fact (1)
{
if (1==0) return 1;
return (1*Fact (0)));
}
1*1=1
2*1= 2
3*2=6
1
0! :Estla condition
d’arrêt pour la série
des auto appels.
Illustration de l’exemple
Dr. Fadoua.BOUAFIF 9
10. Définitions
La récursivité se définit,dans leslangages de programmations, par:
des fonctions récursives
ou des procéduresrécursives.
Un sous-programmeest dit récursif,s’il contient au moins un énoncé d'appel, direct ou
indirect, à lui-même dans son corps.
Tout processus récursif peut être exprimé par son équivalent itératif l'inverse n'est pas
toujoursvalable.
La récursivité est trèsutilisée dans la programmation dynamique (listes,arbres, graphe, etc.).
4
Dr. Fadoua.BOUAFIF 10
11. Avantages et inconvénients
Avantages Inconvénients
Simplifier l'écriture des programmes, puisque
les calculs à effectuer ne sont pas définis
explicitement.
Faciliter la tâche au programmeur, qui
n'aura plus à préciser le nombre de répétition
de la même action, ni à gérer les différentes
valeurs des variables utilisées.
Exiger un grand espace mémoire lors
de l'exécution
Générer une infinité d'appels lorsque la
condition d'arrêt n'est pas atteinte.
5
Dr. Fadoua.BOUAFIF 11
12. Types de récursivité
La récursivité peut être:
6
Directe (Simple) Indirecte
Dr. Fadoua.BOUAFIF 12
13. Simple ou Rapide ou directe:le sous-programme s'appelle lui-même
Syntaxe:
7
La récursivité Directe (Simple)
Sous-programme P1
debut
…..
… ..
appel de P1
fin
Dr. Fadoua.BOUAFIF 13
14. 8
La récursivité Directe (exemple)
Exemple: écrire un sous-programme récursif qui permet de calculer le carré d’un entier n positif.
Principe :
On sait que: (n+1)2 = n2 +2n +1
sionremplacenparn-1n2 =(n-1)2 +2(n-1)+1=(n-1)2 +2n-1
donc
carrer(n)=carrer(n-1)+2n-1
D’oùsin=0alorscarrer(n)=0 conditiond’arret
Dr. Fadoua.BOUAFIF 14
16. Croisée ou indirecte :deux sousprogrammes s'appellent l'unl'autre.
Le premier appelle le second,
Le second appelle le premier,
etc.
Syntaxe:
Sous-programme P1
debut
…..
…..
appel deP2
fin
11
La récursivité Indirecte
Sous-programme P2
debut
…..
…..
appel deP1
fin
Dr. Fadoua.BOUAFIF 16
17. En algorithme
fonction pair (n:entier ):booleen
debut
si(n==0)alors // condition d'arrêt
retourne(vrai)
sinon retourne (impair (n−1))
fin si
fin
fonction impair (n:entier ):booleen
debut
si(n==0)alors // condition d'arrêt
retourne (faux)
sinon retourne (pair (n−1))
finsi
fin
EN C
int pair (intn)
{
if (n==0) // conditiond'arrêt
return 1;
else return(impair (n-1));
}
int impair (intn)
{
if (n==0)// conditiond'arrêt
return 0;
else return(pair (n-1));
}
12
La récursivité Indirecte (exemple)
Exemple: écrire un sous-programme récursif qui permet d’envoyer la parité d’un entier n positif.
Principe: Un nombre n peut-être soit pair :n =2*k soit impair :n =2*k+1
17
18. Exercice d’application
Écrire un sous-programme récursif en C qui testesiun mot estun palindrome.
Un mot palindrome qui se lit de droite à gauche ou de gauche à droite exp: radar
Solution:
Condition d’arrêt: debut >= fin la chaine est palindrome
Appel récursive:
chaine [debut]!=chaine[fin] la chaine n’est pas palindrome
chaine[debut] =
=chaine[fin]
palindrome (chaine, debut++,fin--)
Dr. Fadoua.BOUAFIF 18
20. Conclusion
Pour réussir un sous-programme récursif, ilest nécessaire de biendéfinir
la condition d'arrêt du sous-programme.
Tout sou-programme récursif peut être transcrit en un sous-
programme itératif. l'inverse n'est pas toujours valable.
13
Dr. Fadoua.BOUAFIF 20