Plus généralement, un ensemble de définitions est mutuellement récursif
si la relation << f appelle g >> admet un cycle : appelle
...appelle
appelle
.
L'exemple suivant est classique
(et sans grand intérêt) :
int pair(int n); int impair(int n) { if (n == 0) { return 0; } else { return pair(n-1); } } int pair(int n) { if (n == 0) { return 1; } else { return impair(n-1); } }
Les fonctions pair et impair s'appellent mutuellement :
Le dernier appel retourne 0 (c'est-à-dire << faux >>) :
La définition de la première fonction doit être précédée de la déclaration de la seconde fonction : tout nom doit être déclaré avant d'être utilisé. Les définitions mutuellement récursives sont surtout utiles pour travailler sur des structures de données mutuellement récursives.