Skip to main content

Wat is een recursieve oproep?

In programmeren is een recursieve oproep een opdracht binnen een subroutine of functie die het programma vertelt om opnieuw dezelfde subroutine uit te voeren.De herhaalprestaties kunnen het directe resultaat van de functie zijn, of een tweede functie kan worden geactiveerd die op zijn beurt verwijst naar de eerste functie.Een recursieve oproep heeft enige overeenkomsten met de gevreesde oneindige lus, maar de subroutine heeft altijd een voorwaardelijke verklaring die het programma vertelt wanneer hij moet stoppen met het herhalen van de recursie.

Het concept van recursie wordt misschien het best geïllustreerd door het gebruik van een voorbeeld.Stel dat een dakdekker nieuwe gordelroos op een huis aanbrengt.Om te beginnen moet hij een bundel gordelroos naar het dak dragen.Zodra hij de eerste bundel op zijn plaats heeft genageld, moet hij door de ladder klimmen, een andere bundel ophalen en op zijn plaats nagaan.Het proces gaat door als een reeks Go, Fetch, terugkeert totdat de laatste grind is toegepast.Op dat moment is de dakdekker vrij om door te gaan naar de volgende klus of naar huis te gaan.

Hoewel het voorbeeld een vereenvoudiging is, bevat het alle elementen van een recursieve oproep.Er is een startpunt, de dakdekker moet ophalen wat hij nodig heeft, terugkeren naar het begin en, wanneer aan de uiteindelijke toestand wordt voldaan, stoppen.Dit is eigenlijk wat het programma doet;Het begint, implementeert een actie, keert terug naar zichzelf en eindigt wanneer de eindvoorwaarde optreedt.

De eindvoorwaarde wordt het basisgeval genoemd.Het is essentieel voor alle recursieve oproepen;Zonder dit zou de functie blijven herhalen.In het beste geval resulteert dit in het aftappen van de geheugenbronnen van de systeem.Normaal gesproken zal de overbelasting het programma op een gegeven moment crashen, maar tegen de tijd dat het probleem wordt ontdekt, kan aanzienlijke schade worden aangericht.

Ervaren programmeurs herkennen misschien de gelijkenis tussen een recursieve oproep en een voor of while lus.Als bijvoorbeeld het doel is om de totale inventarisatelling van alle aandelen te vinden met onderdeelnummers groter dan 999, vertelt een voor Loop het programma om alle kwalificerende instanties te vinden en een while lus vertelt het programma om de lus alleen uit te voeren terwijl de vermeldeVoorwaarde is geldig.Van een recursieve oproep kan worden gezegd dat het enkele van de kenmerken van deze lussen combineert met een verklaring van if-then-else;Als deze voorwaarde waar is, doe dit dan, of doe anders iets anders als de toestand onjuist is.Recursie zorgt meestal voor meer compacte code en maakt het mogelijk dat het probleem wordt doorgegeven aan de functie in de buurt van het punt dat het nodig is.