GeeksforGeeks (Suomi)

Sarjat:
ohjelmointi ehdot rekursiivinen funktio voidaan määritellä rutiini, joka kutsuu itseään suoraan tai välillisesti.
rekursiivisen algoritmin avulla tietyt ongelmat voidaan ratkaista melko helposti. Towers of Hanoi (TOH) on yksi tällainen ohjelmointiharjoitus. Yritä kirjoittaa iteratiivinen algoritmi TOH. Lisäksi jokainen rekursiivinen ohjelma voidaan kirjoittaa iteratiivisilla menetelmillä (Refer data Structures by Lipschutz).
matemaattisesti rekursio auttaa ratkaisemaan muutamia pulmia helposti.,
esimerkiksi rutiinihaastattelukysymys,
n-kansan juhlissa kukin kättelee toisiaan vain kerran. Kuinka monta kättelyä tapahtuisi?
ratkaisu:
se voidaan ratkaista eri tavoin, kuvaajilla, rekursiolla jne. Katsotaanpa, miten rekursiivisesti se voidaan ratkaista.
on N henkilöitä. Jokainen kättelee toisiaan vain kerran. Ottaen huomioon N-th henkilö, (t)hänen täytyy kätellä (N-1) henkilöitä. Nyt ongelma supistui pieneksi (N-1) henkilöksi. Olettaen, että TN on täydellinen kättely, se voidaan muotoilla rekursiivisesti.,
TN = (N-1) + TN-1
Ratkaiseminen rekursiivisesti saadaan aritmeettinen sarja, joka voidaan arvioida N(N-1)/2.
liikunta: n parien bileissä vain yksi sukupuoli (joko mies tai nainen) voi kätellä jokaista. Kuinka monta kättelyä tapahtuisi?
yleensä rekursiiviset ohjelmat johtavat huonoihin aikakomplekseihin. Esimerkki on Fibonacci-sarja. Aika monimutkaisuus laskettaessa n: nnen Fibonacci numero käyttämällä rekursio on noin 1,6 m. Se tarkoittaa samaa, tietokone toimii lähes 60% enemmän aikaa seuraava Fibonaccin luku. Rekursiivinen Fibonacci algoritmi on päällekkäisiä aliproblems., On olemassa muita tekniikoita, kuten dynaaminen ohjelmointi parantaa tällaisia päällekkäisiä algoritmeja.
kuitenkin vain harvat algoritmit (esim. yhdistä lajittelu, pikainen lajittelu jne.) johtavat rekursion avulla optimaaliseen ajankäytön monimutkaisuuteen.
perusasia:
Yksi rekursiivisten funktioiden kriittinen vaatimus on päätepiste tai peruskotelo. Jokaisella rekursiivisella ohjelmalla on oltava perusasia, jotta funktio päättyy. Puuttuva perustapaus johtaa odottamattomaan käyttäytymiseen.,
eri tapoja kirjoittaa rekursiivisia funktioita
funktio kutsuu itseään: (suora tie)
useimmat meistä tiedostavat ainakin kaksi eri tapaa kirjoittaa rekursiivisia ohjelmia. Alla on Hanoi-koodin tornit. Se on esimerkki suorasta kutsumisesta.

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

aikakompleksisuus TOH voidaan laskea laatimalla määrä liikkuu.
Meidän täytyy siirtää ensin N-1 levyt Lähde Apu-ja Apu-Kohde, eli ensimmäinen N-1 levyt vaatii kaksi siirtoa. Vielä yksi siirto viimeisestä levystä lähteestä kohteeseen., Matemaattisesti se voidaan määritellä rekursiivisesti.
MN = 2mn-1 + 1.
Voimme helposti ratkaista edellä mainitun rekursiivisen relaation (2n-1), joka on eksponentiaalinen.
rekursio keskinäisellä funktiokutsulla: (epäsuoralla tavalla)
epäsuoralla kutsumuksella. Funktio voi kutsua toista funktiota, jota inturn kutsuu entiseksi funktioksi. Tällöin molemmissa funktioissa pitäisi olla peruskotelo.
Defensive Programming:
voimme yhdistää defensive koodaus tekniikoita rekursion siro toiminnallisuus sovelluksen., Yleensä rekursiivista ohjelmointia ei sallita turvallisuuskriittisissä sovelluksissa, kuten lennonjohdoissa, terveydentilan seurannassa jne. Staattisella laskutekniikalla voidaan kuitenkin välttää hallitsemattomat puhelut (ei turvallisuuskriittisissä järjestelmissä, voidaan käyttää pehmeissä reaaliaikajärjestelmissä).

calldepthin syvyys riippuu funktiopinon rungon koosta ja maksimipinon koosta.
rekursio funktion osoittimilla: (epäsuora tapa)
rekursio voidaan toteuttaa myös funktion osoittimilla. Esimerkki on signaalinkäsittelijä POSIX-valitusjärjestelmissä., Jos käsittelijä aiheuttaa saman tapahtuman, jonka vuoksi käsittelijää kutsutaan, toiminto palaa.

Kiitos Venkille edellä mainitun kirjoituksen kirjoittamisesta. Kirjoita kommentteja, jos havaitset jotain virheellistä tai haluat jakaa lisää tietoa edellä käsitellystä aiheesta.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *