suivant: Récursivité mutuelle
monter: Définitions récursives
précédent: Diviser pour régner
  Table des matières
  Index
Récursivité multiple
Quand le corps d'une fonction comporte plusieurs invocations
récursives, leur évaluation est organisée sous la forme
d'un arbre. L'exemple classique est celui de la définition récursive de
la suite de Fibonacci :
44#44
ce qui se traduit immédiatement en Java par :
static int fib(int n) {
return n<=1 ? 1 : fib(n-1) + fib(n-2);
}
La figure 1.3 représente l'arbre des invocations de
fib(4), et la figure 1.4 représente les états
successifs de la pile, pour une invocation de fib(4) dans
main(...) (pour alléger, les cadres d'invocation de
main(), fib(4), fib(3), etc, y sont désignés
par m, 4, 3, etc). On remarquera que
certaines invocations sont exécutées plusieurs fois : fib(2)
est exécutée deux fois, fib(1) trois fois, fib(0) deux
fois. Rappelons que les sous-expressions étant évaluées de gauche à
droite, l'invocation fib(n-1) est évaluée avant
fib(n-2).
Figure 1.3:
Arbre d'invocation de la suite de Fibonacci
45#45 |
Figure 1.4:
Évolution de la pile pour la suite de Fibonacci
46#46 |
suivant: Récursivité mutuelle
monter: Définitions récursives
précédent: Diviser pour régner
  Table des matières
  Index
Rene' LALEMENT
2002-11-07