Lycée Victor Hugo MPSI-PCSI 2016-2017
•Lorsque la fonction ne porte pas sur un paramètre entier naturel, il est suffisant, pour que cette
fonction termine, que :
1. l’ensemble des paramètres soit muni d’un ordre qui permet de dire qu’un argument est
"avant" un autre,
2. les appels récursifs portent sur des arguments qui sont strictement "avant" l’argument initial.
3. et les premiers arguments soient traités dans les cas des bases
On parle alors d’induction (au lieu de récurrence dans le cas de N)
2 Preuve des algorithmes récursifs
Il s’agit de démontrer que la fonction programmée rend bien pour le résultat escompté. En général
on réglera ce problème en même temps que celui de la terminaison.
•Cas particulier : le paramètre est un entier naturel
On utilisera un raisonnement par récurrence (simple, double, forte selon le type de récursivité
utilisée dans la fonction) en posant :
P(n) : l’algorithme termine et rend le résultat escompté pour la valeur ndu paramètre
•Cas général : le paramètre fait partie d’un ensemble ordonné
On effectue ici un raisonnement par induction en posant :
P(x) : l’algorithme termine et rend le résultat escompté pour la valeur xdu paramètre
Le raisonnement suit d’assez près le principe du raisonnement par récurrence, plus précisément
celui de récurrence forte.
La phase dite de base (similaire à l’initialisation d’un raisonnement par récurrence) sera :
P(base)est vraie
La phase dite d’induction (similaire à l’hérédité pour un raisonnement par récurrence) sera :
Supposons que P(y)est vraie pour tout ysitué avant x, alors [...] P(x)est vraie
3 Complexité des algorithmes récursifs
Évaluation théorique de la complexité
La complexité d’un algorithme récursif peut (sous quelques réserves) s’évaluer à l’aide du nombre
d’opérations effectuées : il va dépendre de deux éléments :
— le nombre d’appels récursifs effectués
— le nombre d’opérations effectuées lors de l’appel de la fonction (ligne d’appel, souvent celle qui
suit else:, et qui traite le cas général)
Pour l’évaluer, on peut poser que C(n)est le nombre d’opérations effectuées, déterminer la formule de
récurrence vérifiée par C(n)par relecture de l’algorithme puis utiliser ses connaissances en mathématiques pour
obtenir sinon la formule explicite de C(n), du moins une comparaison O(...)avec une suite connue.
Évaluation de la complexité
Pour donner quelques idées, lorsque le paramètre dépend d’un entier naturel n:
•S’il s’agit d’une récursivité simple usuelle et que la ligne d’appel ne nécessite qu’un nombre
borné d’opérations, la complexité de l’algorithme sera O(n)
•S’il s’agit d’une récursivité simple et que la ligne d’appel avec la valeur nnécessite un nombre
d’opérations proportionnel à n, la complexité de l’algorithme sera O(n2)
•S’il s’agit d’une récursivité double et que la ligne d’appel ne nécessite qu’un nombre borné
d’opérations, la complexité de l’algorithme sera O(2n)
•S’il s’agit d’une récursivité simple pour laquelle l’appel est fait sur un paramètre voisin de n/2
(méthode appelée “Diviser pour régner”) et que la ligne d’appel ne nécessite qu’un nombre
borné d’opérations, la complexité de l’algorithme sera O(log2(n))
5