Rekursjon er en effektiv tilnærming for å oppløse problemene som komplekse matematiske beregningsoppgaver. Dette gjøres ved å distribuere oppgaven til underoppgaver. Denne prosessen gjøres ved å følge skillet og erobre regelen. Det er ikke en obligatorisk ting å alltid bruke en rekursjonsprosess i programmet ditt for repetisjonen. Ethvert problem som løses gjennom rekursjon kan også løses gjennom iterasjon. Men den rekursive funksjonen er mer effektiv i programmering, da koden er veldig kort og lett forståelig mens den utfører den samme oppgaven. Rekursjonsprosessen anbefales alltid for problemer som søking og sortering, tretraversals osv.
Merk: Rekursjonsprosessen må ha en avsluttende tilstand eller en baseklasse. I det andre tilfellet vil det føre til uendelige henrettelser som en iterasjonssløyfe.
Syntaks av rekursiv funksjon (C ++)
Den grunnleggende syntaks for rekursiv funksjon er gitt som:
void recurse ()
// uttalelse (er)
recurse ();
Konseptet er å dele et problem i mange mindre problemer og deretter legge til alle basisforholdene som kan stoppe rekursjonen.
Basetilstand
I ethvert rekursivt program uttrykkes løsningen av et større problem i mindre problemer.
int faktum (int n)
hvis (n < = 1) // base case
retur 1;
ellers
'annen uttalelse'
Uttalelsen/tilstanden til 'n < =1' is defined here, and hence the larger value can be solved by converting to a smaller one until the condition of the base case is fulfilled. If we don't use a base condition in our program, then there will be no ending point specifying the code, the infinite execution will occur. Here we will use a sample example.
Enkel funksjon
Vurder nå et utvalg av en rekursiv funksjon der vi tar en verdi i hovedprogrammet og deretter gir den til funksjonen. Inne i en funksjon bruker vi en if-ests-setning. Den 'hvis' delen av uttalelsen refererer til grunntilstanden for å avslutte funksjonen eller for å begrense utgangen. Dette vil bli brukt når verdien er mindre enn 1.
Hvis (val < 1)
Mens hovedfunksjonen brukes på 'ellers' delen av funksjonen. Dette er den rekursive funksjonen.
# Funksjon (val - 1)
Verdien vises før og etter denne uttalelsen, så utgangen vil inneholde tallene i nedstigning og i stigende rekkefølge. Utførelsen av koden gjøres gjennom en G ++ -kompilator. '-o' brukes til å lagre utdataene til en kildekode i en utdatafil.
$ g ++ -o R1 R1.c
$ ./R1
Nå ønsker vi å se effekten av basetilstanden i dette programmet. Vi vil se den resulterende verdien; Hvis vi fjerner if-ests-setningen fra det samme programmet som beskrevet ovenfor, hva som vil være utgangen.
Du kan se at resten av koden er uendret etter å ha fjernet den betingede uttalelsen. Etter å ha fjernet grunnerklæringen, vil utdataene se ut som bildet nedenfor. Det vil ikke være noe definert sluttpunkt for denne utførelsen. Du kan legge merke til at utgangen er en uendelig slags et enkelt tall.
Den samme utgangen varer mange linjer til en melding om kjernedump vises.
Arbeid av rekursjon
Anta at en programmerer er villig til å bestemme summen av de første N -tallene, det er mange måter å bestemme summen, men den enkleste er å legge til tallene ved å starte fra 1 til N. Så funksjonen vil se slik ut:
F (n) = 1+2+3+4+5+…+n
Eksemplet ovenfor er det enkle tillegg av tallene. Den andre tilnærmingen omhandler bruken av en rekursiv funksjon.
F (n) = 1 n = 1
F (n) = n + f (n-1) n> 1
Nå kan du påpeke forskjellen mellom begge tilnærmingene. I den andre tilnærmingen er f () en grunnleggende ulikhet, som den i seg selv kalles.
Rekursjon er av to typer. Den ene er direkte rekursjon. Den andre er en indirekte rekursjon. En funksjon kalles en indirekte rekursiv hvis den har en funksjonsanrop for en annen funksjon og at annen funksjon kaller den første funksjonen direkte eller indirekte. En prøve for direkte rekursjon er illustrert som:
Int f (int n)
F (n);
// Noe kode
Mens en prøve for den indirekte rekursjonen er representert som:
void f (int n)
f1 ();
void f1 (int n)
f ();
komme tilbake;
Vi vil nå utdype begge typer rekursive funksjoner gjennom noen grunnleggende eksempler.
Direkte rekursjon
Eksempel 1
Dette eksemplet omhandler beregningen av Fibonacci -serien. Igjen er konseptet det samme; En betinget uttalelse brukes her for å stoppe tilstanden; verdien skal være lik null. Ellers, hvis verdien er lik 1 eller 2, vil den returnere 1. Ettersom denne seriens formasjon trenger 2 tall, så skal antallet som brukes i hovedprogrammet være større enn 2. Uttalelsesformelen for Fibonacci er skrevet i 'ellers' kunsten. Dette er hovedsakelig rekursjonen av programmet.
# Funksjon (val - 1) + funksjon (val - 2))
Mens hovedfunksjonen vil sette i gang den funksjonelle samtalen om å omgå verdien. Denne verdien er et tall som utdata skal være. Utgangen kan sjekkes gjennom Linux -terminalen med en G ++ -kompilator.
Eksempel 2
Dette eksemplet omhandler fabrikkberegningen av et tall. For denne beregningen må et tall være større enn 1, så her har vi brukt en basetilstand; Hvis denne delen av "hvis" -erklæringen er oppfylt, vil programmet bli avsluttet; Ellers brukes den matematiske operasjonen på nummeret.
Val * -funksjon (Val - 1)
Dette er rekursjonsfunksjonen, der svaret på funksjonen igjen brukes i funksjonssamtalen.
Den resulterende verdien vises nedenfor.
Indirekte rekursjon
Vi vil bruke den samme beregningen av factorial indirekte. Som vi har beskrevet tidligere, at funksjonene i indirekte rekursjon ikke kaller det, så vi trenger en annen funksjon til dette formålet. Ta et eksempel som har to funksjoner. I funksjon A er rekursjonsfunksjonen erklært på samme måte som i forrige eksempel, men funksjonssamtalen er for den andre funksjonen, funksjon-B. Funksjon B inneholder den samme beregningsmetoden, og den inneholder den rekursive samtalen for funksjon a.
I hovedprogrammet er det laget en funksjonsanrop for å fungere A.
Når du ser utdataene, vil du merke at svaret for begge rekursjonsmetodene er det samme, men bare forskjellen er i tilnærmingen som brukes.
Konklusjon
'C ++ rekursiv funksjon' har mange fordeler som den brukes i søke- og sorteringsprosessene. Grunntilstanden har hovedrollen i utførelsen av rekursjon, ettersom den begrenser utgangen og uendelig utførelse. De ofte brukte eksemplene forklares her for å gi brukerens forståelse av rekursjon.