GeeksforGeeks (Norsk)

Recursion:
I programmering vilkår en rekursiv funksjon kan defineres som en rutine som kaller seg selv direkte eller indirekte.
ved Hjelp av rekursive algoritmen, enkelte problemer kan løses ganske enkelt. Towers of Hanoi (TOH) er en slik programmering trening. Prøv å skrive en iterativ algoritme for TOH. Videre, hver rekursiv program kan skrives ved hjelp av iterative metoder (Se datastrukturer ved Lipschutz).
Matematisk recursion bidrar til å løse noen oppgaver lett.,
For eksempel, en rutinemessig intervju spørsmål,
I en fest av N personer, og hver person vil riste hennes/hans hånd med hver andre person bare en gang. På totalt hvor mange hånd-rister ville skje?
Løsning:
Det kan løses på ulike måter, grafer, recursion, etc. La oss se, hvordan undermapper det kan løses.
Det er N personer. Hver person rist-hånd med hver andre bare en gang. Vurderer N-th person, (s)han har til å riste hånd med (N-1) personer. Nå er problemet redusert til små forekomster av (N-1) personer. Forutsatt TN sum riste hender, det kan være formulert med undermapper.,
TN = (N-1) + TN-1
Løse det med undermapper gir et aritmetisk serien, som kan vurderes til N(N-1)/2.
Trening: I et parti av N-par, bare ett kjønn (enten mann eller kvinne) kan riste hånden med hver og en. Hvor mange riste hender ville skje?
Vanligvis rekursiv programmer resulterer i dårlig tid kompleksiteten. Et eksempel er Fibonacci-serien. Tiden kompleksiteten i beregning av n-te Fibonacci-tallet ved hjelp av recursion er ca 1,6 n. Det betyr at den samme datamaskinen tar nesten 60% mer tid for neste Fibonacci-tall. Rekursiv Fibonacci algoritme har overlappet subproblems., Det finnes andre teknikker som dynamisk programmering for å forbedre slike overlappende algoritmer.
Men, noen algoritmer, (f.eks. slå sammen sortere, rask sortere, etc…) resulterer i optimal tid kompleksitet ved hjelp av recursion.
Base Case:
En kritisk behov av rekursive funksjoner er endepunkt eller base case. Hver rekursiv programmet må ha base case for å sørge for at funksjonen vil opphøre. Mangler base case resultater i uventede oppførsel.,
Forskjellige Måter å Skrive Rekursive Funksjoner
Funksjon ringe i seg selv: (Direkte måte)
de Fleste av oss klar over minst to forskjellige måter å skrive rekursiv programmer. Gitt nedenfor er towers of Hanoi kode. Det er et eksempel på direkte kall.

Output :

Move the disk 1 from S to DMove the disk 2 from S to AMove the disk 1 from D to AMove the disk 3 from S to DMove the disk 1 from A to SMove the disk 2 from A to DMove the disk 1 from S to D

Den tid kompleksiteten av TOH kan beregnes ved å formulere antall trekk.
Vi trenger å flytte den første N-1-disker fra Kilde til Aux og fra Hjelpepleiere til Mål, dvs. den første N-1 disker krever to trekk. En mer flytte til siste disken fra Kilde til Destinasjon., Matematisk kan det være definert med undermapper.
MN = 2MN-1 + 1.
Vi enkelt kan løse de ovennevnte rekursiv forhold (2N-1), som er eksponentiell.
Recursion ved hjelp av gjensidig funksjonen samtale: (Indirekte måte)
Indirekte ringer. Selv om minst praktisk, en funksjon kan ringe til en annen funksjon som inturn anrop tidligere funksjon. I dette tilfellet begge funksjonene skal ha base case.
Defensive Programmering:
Vi kan kombinere defensive koding teknikker med recursion for grasiøs funksjonaliteten til programmet., Vanligvis rekursiv programmering er ikke tillatt i sikkerhetskritiske applikasjoner, slik som flight controls, helse overvåking, etc. Imidlertid kan man bruke en statisk count teknikk for å unngå ukontrollert anrop (IKKE i sikkerhetskritiske systemer, kan brukes i mykt ekte tid systemer).

callDepth dybde avhenger av funksjonen stabelen bildestørrelse og maksimal størrelse på stabelen.
Recursion ved hjelp av funksjonen pekere: (Indirekte måte)
– Recursion kan også gjennomføres med funksjonen pekere. Et eksempel er signal handler i POSIX klage systemer., Hvis behandleren fører til for å utløse samme hendelse på grunn av noe som behandleren blir kalt, vil funksjonen angi på nytt.

Takk til Venki for å skrive ovennevnte innlegg. Vennligst skriv kommentarer hvis du finner noe feil, eller du ønsker å dele mer informasjon om temaet er diskutert ovenfor.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *