Skip to main content

Hvad er et rekursivt opkald?

I programmering er et rekursivt opkald en kommando inden for en subroutine eller funktion, der fortæller programmet om at køre den samme subroutine igen.Den gentagne ydelse kan være det direkte resultat af funktionen, eller en anden funktion kan udløses, at igen henviser tilbage til den første funktion.Et rekursivt opkald har nogle ligheder med den frygtede uendelige sløjfe, men subroutinen har altid en betinget erklæring, der fortæller programmet, hvornår man skal stoppe med at gentage rekursionen.

Begrebet rekursion er måske bedst illustreret ved hjælp af et eksempel.Antag, at en tagdækning anvender nye helvedesild på et hjem.Til at begynde med skal han bære et bundt helvedesild til taget.Når han har spikret det første bundt på plads, skal han klatre ned ad stigen, hente et andet bundt og søm det på plads.Processen fortsætter som en række GO, henter, vender tilbage, indtil den sidste helvedesild er blevet anvendt.På det tidspunkt er rooferen fri til at gå videre til det næste job eller gå hjem.

Selvom eksemplet er en forenkling, indeholder den alle elementerne i et rekursivt opkald.Der er et udgangspunkt, Rooferen skal hente det, han har brug for, vende tilbage til begyndelsen, og når den endelige betingelse er opfyldt, skal du stoppe.Dette er dybest set, hvad programmet gør;Det starter, implementerer en handling, vender tilbage til sig selv og afsluttes, når sluttilstanden opstår.

Endingstilstanden omtales som basissagen.Det er vigtigt for alle rekursive opkald;Uden den ville funktionen fortsætte med at gentage.I bedste fald resulterer dette i at dræne systemets hukommelsesressourcer.Normalt vil overbelastningen gå ned i programmet på et tidspunkt, men når problemet opdages, kan der gøres betydelige skader.

Erfarne programmerere kan muligvis genkende ligheden mellem et rekursivt opkald og en for eller mens loop.Hvis målet for eksempel er at finde det samlede lagertælling af alle lager med delnumre større end 999, fortæller A for Loop programmet til at lokalisere alle kvalificerende forekomster, og et stykke tid loop fortæller programmet til at udføre loopTilstand er gyldig.Det kan siges, at et rekursivt opkald kombinerer nogle af funktionerne i disse sløjfer med en IF-THEN-ELSE-erklæring;Hvis denne betingelse er sand, skal du gøre dette, ellers gør noget andet, hvis tilstanden er falsk.Rekursion tillader imidlertid typisk mere kompakt kode, og gør det muligt at videregive problemet til funktionen nærmere det punkt, det er nødvendigt.