next up previous contents index
Next: Récursivité terminale Up: Définitions récursives Previous: Définitions récursives

    
Récursivité mutuelle

Un ensemble de définitions est mutuellement récursif si la relation << f invoque g >> admet un cycle : f1 invoque ...invoque fn invoque f1.   L'exemple suivant est classique (et sans grand intérêt) :

  static boolean impair(int n) {
    if (n == 0) {
      return false;
    } else {
      return pair(n-1);
    }
  }
  
  static boolean pair(int n) {
    if (n == 0) {
      return true;
    } else {
      return impair(n-1);
    }
}

Les fonctions pair() et impair() s'invoquent mutuellement :

\begin{displaymath}\mathtt{pair}(3) \to \mathtt{impair}(2) \to \mathtt{pair}(1) \to
\mathtt{impair}(0)
\end{displaymath}

La dernière invocation retourne false :

\begin{displaymath}\mathtt{impair}(0) \stackrel{\mathtt{false}}{\to} \mathtt{pai...
...mathtt{pair}(3) \stackrel{\mathtt{false}}{\to} \texttt{main()}
\end{displaymath}

Les définitions mutuellement récursives sont surtout utiles pour travailler sur des structures de données mutuellement récursives, par exemple en analyse syntaxique.



R. Lalement
2000-10-23