Hva er en rekursiv samtale?
I programmering er en rekursiv samtale en kommando i en subroutine eller funksjon som forteller at programmet skal kjøre den samme subroutine igjen. Gjenta ytelsen kan være et direkte resultat av funksjonen, eller en andre funksjon kan utløses som igjen viser tilbake til den første funksjonen. En rekursiv samtale har noen likhetstrekk med den fryktede uendelige sløyfen, men subroutinen har alltid en betinget uttalelse som forteller programmet når du skal slutte å gjenta rekursjonen.
Rekursjonbegrepet illustreres kanskje best ved bruk av et eksempel. Anta at en takhaker bruker nye helvetesild på et hjem. For å begynne, må han bære et bunt helvetesild til taket. Når han har spikret det første buntet på plass, må han klatre ned stigen, hente et nytt bunt og spikre det på plass. Prosessen fortsetter som en serie "gå, hent, returner" til den siste helvetesilden er brukt. På det tidspunktet er takhekken fri til å gå videre til neste jobb eller dra hjem.
Selv om eksemplet er en forenkling, inneholder det alle elementene i en rekursiv samtale. Det er et utgangspunkt, rooferen må hente det han trenger, gå tilbake til begynnelsen og, når den endelige betingelsen er oppfylt, stoppe. Dette er i utgangspunktet det programmet gjør; den starter, implementerer en handling, går tilbake til seg selv og avsluttes når sluttbetingelsen oppstår.
Sluttbetingelsen blir referert til som basissaken. Det er viktig for alle rekursive samtaler; uten den vil funksjonen fortsette å gjenta seg. I beste fall resulterer dette i å tømme systemets hukommelsesressurser. Normalt vil overbelastningen krasje programmet på et tidspunkt, men når problemet oppdages, kan det bli betydelig skade.
Erfarne programmerere kan kjenne igjen likheten mellom en rekursiv samtale og en "for" eller "mens" sløyfe. Hvis for eksempel målet er å finne det totale lagertallet for alle aksjer med varenummer større enn 999, forteller en "for" -sløyfe programmet om å finne alle kvalifiserte forekomster og en "mens" -sløyfe ber programmet om å utføre loopen bare mens den oppgitte tilstanden er gyldig. En rekursiv samtale kan sies å kombinere noen av funksjonene til disse løkkene med en "if-then-else" uttalelse; Hvis denne tilstanden er sann, gjør du dette, eller gjør noe annet hvis tilstanden er falsk. Rekursjon gir imidlertid vanligvis mer kompakt kode, og gjør at problemet kan overføres til funksjonen nærmere det punktet det trengs.