Les boucles récursives

Une boucle dite récursive (n), contenue dans une boucle parente (x), permet d’exécuter la boucle (x) une nouvelle fois, en transmettant automatiquement les paramètres nécessaires. Donc, à l’intérieur de la boucle (x), on appelle cette même boucle (c’est ce qu’on nomme la « récursion ») avec d’autres arguments. Ce processus se répètera tant que la boucle appelée retourne des résultats.

<BOUCLEx(TABLE){id_parent}>
  ...
  <BOUCLEn(BOUCLEx) />
  ...
</BOUCLEx>

Lorsqu’un site possède de nombreuses sous-rubriques, ou de nombreux messages de forums, ces boucles récursives sont souvent utilisées. On peut ainsi afficher facilement des éléments identiques hiérarchisés.

Exemple

Nous allons de cette manière afficher la liste complète des rubriques du site. Pour cela, nous bouclons une première fois sur les rubriques, avec un critère pour sélectionner les rubriques filles de la rubrique en cours : {id_parent}. Nous trions aussi par numéro (un rang donné aux rubriques pour les afficher volontairement dans un certain ordre), puis par titre de rubrique.

<B_rubs>
  <ul>
  <BOUCLE_rubs(RUBRIQUES){id_parent}{par num titre, titre}>
    <li>#TITRE
    <BOUCLE_sous_rubs(BOUCLE_rubs) />
    </li>
  </BOUCLE_rubs>
  </ul>
</B_rubs>

Au premier passage dans la boucle, id_parent va lister les rubriques à la racine du site. Elles ont le champ SQL id_parent valant zéro. Une fois la première rubrique affichée, la boucle récursive est appelée. SPIP appelle de nouveau la boucle « _rubs ». Cette fois la sélection {id_parent} n’est plus la même car ce critère liste les rubriques filles de la rubrique en cours. S’il y a effectivement des sous-rubriques, la première est affichée. Puis aussitôt et une nouvelle fois, mais dans cette sous-rubrique, la boucle « _rubs » est exécutée. Tant qu’il y a des sous rubriques à afficher, ce processus récursif recommence.

Ce qui donne :

<ul>
<li>en
    <ul>
        <li>Introduction</li>
        <li>The templates
            <ul>
                <li>Loops</li>
            </ul>
        </li>
        <li>Extending SPIP
            <ul>
                <li>Introduction</li>
                <li>Pipelines</li>
                ...
            </ul>
        </li>
        ...
    </ul>
</li>
<li>fr
    <ul>
        <li>Introduction</li>
        <li>Écriture des squelettes
            <ul>
                <li>Boucles</li>
                <li>Balises</li>
                <li>Critères de boucles</li>
                ...
            </ul>
        </li>
        ...
    </ul>
</li>
</ul>

Comprendre les principes de la récursivité en programmation n’est pas forcément facile. Si ce qui est expliqué ici vous laisse perplexe, lisez l’article consacré de SPIP.net qui explique cela avec d’autres mots :
http://www.spip.net/fr_article914.html

Auteur Matthieu Marcillaud Publié le : Mis à jour : 03/11/09

Traductions : English, Español, français