Chapitre 1 Récursivité Algo-STD
Chapitre 1 Récursivité Algo-STD
Chapitre 1 Récursivité Algo-STD
Récursivité
CaractÏristiques principales
• Une procédure (ou fonction) récursive comporte au moins un appel à elle-
même, alors qu’une procédure (ou fonction) non récursive ne peut com-
porter que des appels à d’autres procédures (ou fonctions).
• La récursivité permet d’écrire des programmes (algorithmes) plus facile-
ment, et de manière élégante.
• Les programmes (algorithmes) itératifs sont souvent plus efficaces que les
programmes (algorithmes) récursifs.
• Une procédure récursive n’est jamais plus rapide que son homologue itérative.
SchÏma gÏnÏral
RÏcursivitÏ terminale
Un algorithme est récursif terminal s’il ne contient aucun traitement après un
appel récursif.
Remarque
Il est toujours possible de dérécursifier un algorithme récursif.
• S’il est récursif non-terminal, on utilise les piles pour sauvegarder le con-
texte.
• S’il est récursif terminal, il est inutile d’utiliser les piles ; l’algorithme se
transforme alors comme suit
Algo P’(u);
Tant que (C(u)) faire
B(u);
u ← a(u)
Fait
T(u)
ExemplesdefonctionsrÏcursivesnon-terminales
• La fonction ADD présentée précédemment en 1.4 est récursive non-terminale.
L’exécutiondelafonctionPLUS(4,2)estmontréedansletableausuivant:
• Enfin, la fonction Somme cubic suivante qui calcule la somme cubique des
N premiers entiers est également une fonction récursive non-terminale.
Fonction Somme cubic( N : entier) : entier;
Si (N = 0) Alors
retourner (0)
Sinon
retourner (Somme cubic (N − 1)+ N 3 )
Fin Si
L’exécution de la fonction Somme cubic (3) est répertoriée dans le tableau ci-
après :
Appel Exécution Valeur retournée
Somme cubic (3) Somme cubic (2) + 33 -
Somme cubic (2) Somme cubic (1) + 23 -
Somme cubic (1) Somme cubic (0) + 13 -
Somme cubic (0) Somme cubic ← 0 0 est le résultat au 1er retour
0 + 13 : 1 est le résultat au 2eme retour
1 + 23 : 9 est le résultat au 3eme retour
9 + 33 : 36 est le résultat au dernier retour
qui est la valeur correspondant
à l’appel Somme cubic (3)
ExemplesdefonctionsrÏcursivesterminales
FonctionPGCD(A,B:entier):entier;
Si (A6=B) Alors
Si (A > B) Alors
retourner PGCD (A − B, B)
Sinon
reourner PGCD (A, B − A)
Fin Si
Sinon
retourner (A)
Fin Si
• Unautreexempledefonctionrécursiveterminaleestlafonctionrécursive
booléenne (prédicat) qui indique si un nombre entier naturel est pair ou
non (impair). Elle consiste en le pseudo code suivant :