Wat is een recursieve oproep?

Bij het programmeren is een recursieve oproep een opdracht binnen een subroutine of functie die het programma vertelt om dezelfde subroutine opnieuw 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, Return" totdat de laatste grind is toegepast. Op dat moment is de dakdekker vrij om door te gaan naar de volgende baan of naar huis te gaan.

Hoewel het voorbeeld iS een vereenvoudiging, het bevat 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 de basiscase 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 het 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 "terwijl" Loop. Als bijvoorbeeld het doel is om het totale aantal voorraad van alle aandelen te vinden met deel nUmbers groter dan 999, een "voor" -lus vertelt het programma om alle kwalificerende instanties te vinden en een "terwijl" Loop het programma vertelt om de lus alleen uit te voeren, terwijl de vermelde voorwaarde geldig is. Van een recursieve oproep kan worden gezegd dat het enkele kenmerken van deze lussen combineert met een "if-then-else" -verklaring; 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.

ANDERE TALEN