Recursieve lussen

Een veelgebruikt concept in vele programmeertalen, een algoritme (een gegevensverwerkingscode) dat verwijst naar zichzelf, wordt beschreven als "recursief". Hier maakt een recursieve lus (n), vervat in een omhullende lus (x), het mogelijk om de lus (x) opnieuw uit te voeren, door automatisch de vereiste argumenten door te geven. Daarom wordt binnen de lus (x) dezelfde lus (x) aangeroepen met verschillende parameters. Dit is wat we recursie noemen. Dit proces zal zo vaak herhaald worden als de recursieve lus resultaten oplevert.

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

Wanneer een site veel subrubrieken heeft, of veel forumberichten, maakt het vaak gebruik van recursieve lussen. Dit maakt het mogelijk om identieke elementen heel eenvoudig weer te geven.

Voorbeeld

We kunnen een recursieve lus gebruiken om een lijst van alle rubrieken van de site weer te geven. Om dit te doen, maken we allereerst een lus op de hoofrubrieken, met een voorwaarde die de subrubrieken van de huidige rubriek selecteert:
{id_parent}. We sorteren ook op nummer (toegewezen aan de rubrieken zodat we ze in een bepaalde volgorde kunnen weergeven), en vervolgens op titel (in het geval dat de nummers afwezig zijn of herhaald worden voor rubrieken binnen een bepaalde bovenliggende rubriek).

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

In de eerste iteratie van de lus zal {id_parent} de rubrieken in de root van de site weergeven. Deze "hoofdrubrieken" hebben allemaal een id_parent veld gelijk aan nul. Wanneer de eerste rubriek wordt weergegeven, wordt de recursieve lus aangeroepen en dus roept SPIP opnieuw de lus "_rubs" aan. Dit keer selecteert het {id_parent} criterium een andere set rubrieken omdat het de subrubrieken van de huidige rubriek weergeeft. Als er subrubrieken zijn, wordt de eerste getoond. Dan wordt de "_rubs"-lus opnieuw aangeroepen, maar nu voor deze subrubriek. Zolang er diepere subrubrieken moeten worden weergegeven, zal dit recursieve proces zich herhalen.

Resultaat:

<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>es
	<ul>
		<li>Introduction</li>
		<li>Template syntax
			<ul>
				<li>Loops</li>
				<li>Tags</li>
				<li>Loops criteria</li>
				...
			</ul>
		</li>
		...
	</ul>
</li>
<li>fr
	<ul>
		<li>Introduction</li>
		<li>Template syntax
			<ul>
				<li>Loops</li>
				<li>Tags</li>
				<li>Loops criteria</li>
				...
			</ul>
		</li>
		...
	</ul>
</li>
</ul>

Het is niet eenvoudig om de principes van recursief programmeren te begrijpen. Als deze uitleg je heeft verward, kan het nuttig zijn om het artikel over recursieve lussen op SPIP.net te lezen:
https://www.spip.net/nl_article5907.html

Auteur hanjo Gepubliceerd op: Aangepast: 12/03/23

Vertalingen: English, Español, français, Nederlands