Un sous-programme récursif est un sous-programme qui s'appelle lui-même. Par exemple :
Ce sous-programme affiche si celui-ci est positif ou nul, puis se
rappelle en passant
en paramètre. Il va se rappeler jusqu'à ce
que le paramètre prenne la valeur
, affichant ainsi un compte à
rebours dont la dernière valeur affichée sera
. Lorsque qu'un
sous-programme se rappelle, on dit qu'il effectue un appel
récursif. Pour observer ce que cela fait, considérez le programme
suivant :
#include<stdio.h> void countDown(int n) { if (n >= 0) { printf("%d\n", n); countDown(n-1); } } int main() { countDown(10); return 0; }
Il affiche
10 9 8 7 6 5 4 3 2 1 0
Observons bien la procédure :
Beaucoup de sous-programmes sont beaucoup plus faciles à implémenter de façon récursive. Un sous-programme utilisant des boucles mais pas la récursivité est dit itératif. Comme la récursivité permet d'éviter de faire des boucles, on oppose souvent la mode récursif au mode itératif. On exposera divers algorithmes s'implémentant naturellement de façon récursive, notamment le tri fusion, et les algorithmes dans les listes et les arbres. Pour le moment nous nous limiterons au calcul de valeurs définies par récurrence.