| 155 | Les méthodes {{{litterals()}}}, {{{support()}}}, {{{display()}}} et {{{parse()}}} de la |
| 156 | classe {{{Ebm}}} sont récursives. On définit le niveau de profondeur de l'arbre d'une |
| 157 | {{{EBM}}} comme le nombre d'arcs {{{N}}} nécessaire pour atteindre la racine. Dans |
| 158 | l'{{{EBM}}} {{{e4}}}, la racine {{{e4}}} à une profondeur nulle, {{{e1}}} une profondeur |
| 159 | de 1 et {{{a}}} une profondeur de 2. |
| 160 | |
| 161 | '''Récursion''' |
| 162 | |
| 163 | Considérons l'exemple de la fonction {{{litterals()}}}. Dire qu'elle est récursive |
| 164 | signifie que son calcul au niveau de profondeur {{{N}}} peut se décomposer en |
| 165 | calculs ''de cette même fonction'' appliquée sur le niveau {{{N+1}}}. |
| 166 | Par exemple, le calcul de {{{litterals()}}} de {{{e4}}} peut s'exprimer comme |
| 167 | la somme des fonctions {{{litterals()}}} ''appliquée à ses opérandes'' |
| 168 | ({{{e0}}}, {{{e1}}}, {{{e2}}} et {{{e3}}}) : |
| 169 | |
| 170 | '''Condition d'arrêt''' |
| 171 | |
| 172 | On comprend bien, que l'on ne va pas rappeler indéfiniment {{{litterals()}}}, |
| 173 | à une profondeur donnée, il faudra bien d'arrêter. Le critère d'arrêt est simple: |
| 174 | lorsque l'on atteind une {{{EbmVar}}}, le noeud n'a pas d'opérandes, et son |
| 175 | nombre de littéraux vaut 1. |
| 176 | |
| 177 | En conclusion, la fonction récursive aura la structure générale suivante: |
| 178 | |