Jusqu’à présent, nous avons vu comment utiliser des boucles pour résoudre des problèmes itératifs. À présent, nous allons utiliser un autre type de construction, à la fois puissant et élégant : la récursion.
Considérons un exemple pour comprendre la récursion.
Une fonction est dite récursive si elle s'appelle elle-même.
Ce mécanisme un peu étrange permet souvent de simplifier des processus itératifs.
L'analyse des fonctions compute
et compute_rec
servira à illustrer le lien entre ces deux types d'approches.
Le but de ces deux fonctions est de calculer la somme des entiers de 0 à n. Si l'on devait calculer cela à la main, on développerait sans doute la formule suivante :
Cela correspond à la fonction compute(n)
qui calcule la somme de façon itérative avec une boucle.
Si l'on regroupe les termes de l'équation (1) dans l'autre sens, on peut mettre en évidence une autre façon de définir la fonction f(n) :
À partir de l'équation (6), on déduit la définition par équations de récurrence de la fonction f(n) :
L'équation (7) définit le cas de base.
L'équation (8) définit tous les autres cas par récurrence.
C'est-à-dire que la fonction f(n) est définie à partir de cette même fonction, mais avec un argument différent de n (ici n-1).
Le cas de base est très important : sans celui-ci, (8) ne s'arrête jamais ou n'est pas défini pour n=0.
Ce principe est utilisé pour définir la fonction récursive compute_rec(n)
.