Skip to main content

Vad är ett rekursivt samtal?

Vid programmering är ett rekursivt samtal ett kommando inom en subroutine eller funktion som säger programmet att köra samma subroutine igen.Upprepningsprestanda kan vara det direkta resultatet av funktionen, eller en andra funktion kan utlösas som i sin tur hänvisar tillbaka till den första funktionen.Ett rekursivt samtal har vissa likheter med den fruktade oändliga slingan, men subrutinen har alltid ett villkorat uttalande som säger programmet när man ska sluta upprepa rekursionen.

Begreppet rekursion är kanske bäst illustrerad genom användning av ett exempel.Anta att en takläggare applicerar nya bältros på ett hem.Till att börja med måste han bära ett bunt bältros till taket.När han har spikat det första paketet på plats måste han klättra nerför stegen, hämta en annan bunt och spika den på plats.Processen fortsätter som en serie GO, hämta, återvända tills den sista bälten har applicerats.Vid den tidpunkten är takläggaren fritt att gå vidare till nästa jobb eller åka hem.

Även om exemplet är en överförenkling, innehåller den alla elementen i ett rekursivt samtal.Det finns en utgångspunkt, takläggaren måste hämta vad han behöver, återgå till början och när det slutliga villkoret är uppfyllt, stopp.Detta är i princip vad programmet gör;Det startar, implementerar en åtgärd, återvänder till sig själv och avslutas när sluttillståndet inträffar.

Det slutliga tillståndet kallas basfallet.Det är viktigt för alla rekursiva samtal;Utan den skulle funktionen fortsätta att upprepa.I bästa fall resulterar detta i att tömning av systemminnesresurserna.Normalt kommer överbelastningen att krascha programmet vid någon tidpunkt, men när problemet upptäcks kan betydande skador göras.

Erfarna programmerare kanske känner igen likheten mellan ett rekursivt samtal och A för eller medan slingan.Om till exempel målet är att hitta det totala lagerantalet för alla lager med artikelnummer större än 999, säger A For Loop programmet för att hitta alla kvalificerade instanser och en stund Loop säger till programmet att utföra slingan endast medan den angivnavillkor är giltigt.Ett rekursivt samtal kan sägas att kombinera några av funktionerna i dessa slingor med ett if-then-stickat uttalande;Om detta tillstånd är sant, gör det här, annars gör du något annorlunda om villkoret är falskt.Rekursion möjliggör dock mer kompakt kod och gör det möjligt att överföra problemet till funktionen närmare den punkt den behövs.