Hvad er et rekursivt opkald?

Ved 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 serie af "Go, hent, return", 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 jegS en overforenkling, den indeholder 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.

Afslutningsbetingelsen 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 nedbryde programmet på et tidspunkt, men når problemet opdages, kan der gøres betydelige skader.

Erfarne programmerere genkender muligvis ligheden mellem et rekursivt opkald og en "for" eller "mens" loop. Hvis målet for eksempel er at finde det samlede lagertælling af al lager med del nUmbers større end 999, en "for" loop fortæller programmet om at lokalisere alle kvalificerende forekomster og en "mens" loop fortæller programmet om kun at udføre løkken, mens den angivne tilstand 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 tillader, at problemet overføres til funktionen nærmere det punkt, det er nødvendigt.

ANDRE SPROG

Hjalp denne artikel dig? tak for tilbagemeldingen tak for tilbagemeldingen

Hvordan kan vi hjælpe? Hvordan kan vi hjælpe?