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 illustreras kanske bäst 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 "gå, hämta, returnera" tills den sista bälten har tillämpats. Vid den tidpunkten är takläggaren fritt att gå vidare till nästa jobb eller åka hem.

även om exemplet iS En överförenkling, den innehåller alla element 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 börjar, implementerar en handling, återvänder till sig själv och avslutas när sluttillståndet inträffar.

Sluttillstå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 systemets minnesresurser. 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 ett "för" eller "medan" slinga. Om till exempel målet är att hitta det totala lagerantalet för alla lager med del nUmbers större än 999, en "för" Loop säger till programmet för att hitta alla kvalificerade instanser och en "medan" -slinga säger att programmet ska utföra slingan endast medan det angivna tillståndet är giltigt. Ett rekursivt samtal kan sägas att kombinera några av funktionerna i dessa slingor med ett "if-then" -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 vanligtvis mer kompakt kod och gör det möjligt att överföra problemet till funktionen närmare den punkt den behövs.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?