Récursivité
Vous ne pouvez pas comprendre la récursivité sans avoir d’abord compris la récursivité.
Récursivité : notion et exemples.¶
Quelques exemples¶
Toutes ces images ont un point commun : on dit qu'elles sont autoréférentes : on trouve dans l'image une référence à l'image elle-même.
Un procédé (au sens large) est dit récursif lorsqu'il possède la propriété de faire référence à lui-même à un moment donné lors de la description de ce procédé.
Certains objets de la vie courante peuvent être définis de manière récursive :
- lors d'une mise en abîme
- dans un arbre généalogique
Application aux algorithmes¶
Toute fonction calculable (au sens intuitif) est récursive (au sens large).
Énoncé du problème. Pour tout entier , on définit le problème suivant :
« Calculer la somme des premiers entiers : »
-
Méthode 1. Il est possible d'écrire une fonction python itérative (avec une boucle), qui prenne en entrée un entier
n
et qui renvoie l'entierS
associé :1 2 3 4 5 6
def somme(n): """ int -> int""" S = 0 for i in range(1, n + 1): S = S + i return S
-
Méthode 2. Il est possible d'écrire une fonction python récursive (faisant référence à elle-même), qui prenne en entrée un entier
n
et qui renvoie l'entierS
associé :-
On sait résoudre le problème dans le cas où . Dans ce cas la solution est .
-
Dans le cas général, on veut résoudre le problème de difficulté , c'est à dire « Calculer la somme des premiers entiers : ».
-
On suppose que l'on connait la réponse au problème de difficulté . On connait donc .
-
À l'aide de , on construit la solution au problème . Il suffit de remarquer que :
-
-
On aboutit donc au code python ci-dessous :
1 2 3 4 5 6 7 8
def somme(n): # Cas de base: if n == 1: return 1 # Cas général else: Sp = somme(n - 1) # appel dit récursif return Sp + n
-
Remarque. On peut faire le lien avec la définition par récurrence de la suite , définie pour tout par :
On considère un problème à résoudre, qui dépend d'un certain paramètre , que l'on appelle le rang (la "difficulté") du problème.
Pour écrire un algorithme de manière récursive, la méthode générale est la suivante :
- Identifier le cas de base. Il s'agit de trouver dans quel cas la résolution du problème est "simple" (souvent ou )
- Résoudre le problème de manière récursive.
- On suppose connue la solution des problèmes de rang strictement inférieur à .
- On construit la solution du problème de rang à l'aide de la solution d'un problème de rang inférieur.
Récursivité : première application¶
-
est une suite arithmétique de raison et de premier terme . Écrire une fonction python récursive
u
qui étant donné un entier calcule .1 2 3 4 5 6 7 8
def u_n(n): """ int -> int """ # Cas de base if n <= 0: return 2 else: avant = u(n - 1) # appel récursif return 5 + avant
-
est une suite géométrique de raison et de premier terme . Écrire une fonction python récursive
v
qui étant donné un entier calcule .1 2 3 4 5 6 7 8
def v(n): """ int -> int """ # Cas de base if n <= 0: return 8 else: avant = v(n - 1) # appel récursif return -2*avant