Rekurzivni algoritam: opis, analiza, značajke i primjeri

Moderna razumijevanje rekurzije: definicija funkcionalnosti i apeliram na njega izvana i iz tog funkcionalnosti. Smatra se da je rekurzija rođen matematičare: faktorijel, beskonačnu seriju, fraktali, nastavio frakcije ... Međutim, rekurzija se mogu naći posvuda. Objektivni zakoni prirode, „vjeruju” rekurzija algoritam i njegov glavni oblik izražavanja (postojanja) nije toliko objekti materijalnog svijeta, kao i osnovni algoritam pokreta.

rekurzivni algoritam

Ljudi različitih specijalnosti u različitim područjima znanosti i tehnologije koriste rekurzivni algoritam f (x), gdje je "x / / f (x)". Funkcija koja se naziva je snažno rješenje, no formiranje i razumijevanje ovog rješenja, u većini slučajeva, predstavlja vrlo težak zadatak.

U drevnim vremenima rekurzija je korištena za povećanje prostora palače. Kroz sustav ogledala nasuprot jedni drugima, možete stvoriti fantastične volumetrijske prostorne efekte. Ali, lako je razumjeti kako postaviti ta zrcala? A još je teže utvrditi gdje se nalazi točka u prostoru, koja se reflektira kroz nekoliko zrcala.

Rekurzija, rekurzivno algoritmi: značenje i sintaksa

Zadatak koji je formuliran ponavljanjem niza operacija može se rekurzivno riješiti. Jednostavan algoritam (izračunavanje kvadratne jednadžbe, skripta za popunjavanje web stranice s informacijama, čitanje datoteke, slanje poruke ...) ne zahtijeva upotrebu rekurzije.

Glavne razlike algoritma, koje omogućuju rekurzivno rješenje:

  • postoji algoritam koji treba izvršiti nekoliko puta;
  • algoritam treba podatke koji se mijenjaju svaki put;
  • Algoritam se ne mora mijenjati svaki put;
  • postoji konačni uvjet: algoritam je rekurzivni - ne beskonačan.

Općenito, ne može se tvrditi da je jedno izvršenje obvezni uvjet za odsutnost prigode rekurzije. Ne možete zahtijevati i obavezno konačno stanje: beskonačne rekurzije imaju svoju primjenu.

Algoritam je rekurzivno: kada se niz operacija izvodi više puta, na podacima koji se mijenjaju svaki put i svaki put daje novi rezultat.

Rekursna formula

Matematičko razumijevanje rekurzije i njegovog analognog u programiranju su različiti. Matematika, iako karakteristična za programiranje, ali programiranje je mnogo višu razinu matematike.

rekurzivni algoritam f

Dobro napisani algoritam je poput zrcala autorovog intelekta. Opća formula rekurzije u programiranju "f (x)", gdje "x ~ / = f (x)" ima najmanje dvije varijante interpretacije. Ovdje je "~" sličnost ili odsutnost rezultata, a "=" prisutnost rezultata funkcije.

Prva opcija: dinamika podataka.

  • funkcija "f (x)" ima algoritam rekurzivnim i ne varijabilnim;
  • "X" i rezultat "f (x)" - svaki put imaju nove vrijednosti, rezultat "f (x)" je novi parametar "x" ove funkcije.

Druga opcija: dinamika koda.

  • funkcija "f (x)" ima nekoliko algoritama koji poboljšavaju (analiziraju) podatke;
  • analiza podataka - jedan dio koda i implementacija rekurzivnih algoritama koji izvode željenu akciju - drugi dio koda;
  • rezultat funkcije "f (x)" nije.

Nedostatak rezultata je normalno. Programiranje nije matematika, rezultat nije nužno tamo. Funkcija koja se izvršava rekurzivno može jednostavno analizirati web stranice i popuniti bazu podataka, ili stvoriti željene instance objekata prema dolazni ulazni tok.

Podaci i rekurzija

Programiranje rekurzivni algoritmi - to nije faktorijel, u kojoj je funkcija dobiva svaki put to osim po jedan u manjim ili većim strani - utjelovljenje ovisi o preferencijama developer.

Nije bitno što je smatran faktorskom „8!”, Kreće od 0, 1, 2, ..., ili obratno 8, 7, 6 ... Slično izračunu matematičke slijed, fraktalni ili beskonačan niz je zabilježena i jednostavna matematička formula, odnosno, algoritam koji strogo slijedi ovu formulu.

Obrada informacija je "matematika" sasvim drugačijeg reda. Recurzivne funkcije i algoritmi ovdje djeluju s slovima, riječima, fraze, rečenicama i odlomcima. Svaka sljedeća razina koristi prethodnu.

Ulazni tok podataka analizira se u širokom rasponu uvjeta, ali proces analize općenito je rekurzivni. Nema smisla pisati jedinstvene algoritme za sve varijante ulaznog toka. Mora postojati jedna funkcionalna. Ovdje su rekurzivni algoritmi primjeri kako generirati izlazni tok koji odgovara ulazu. Ovo nije rezultat ulaska u rekurzivni algoritam, ali to je željeno i nužno rješenje.

Apstrakcija, rekurzija i OOP

Objektno orijentirano programiranje (OOP) i rekurzija su temeljno različiti entiteti, ali savršeno se nadopunjuju. Apstrakcija nema nikakve veze s rekurzijom, ali kroz prizmu OOP-a omogućava se provođenje kontekstualne rekurzije.

Na primjer, podaci se raščlanjuju i ističu se zasebna slova, riječi, fraze, rečenice i stavke. Očito, razvojni programer će osigurati stvaranje primjeraka predmeta ovih pet vrsta i ponudit će ih rješavanje rekurzivnih algoritama na svakoj razini.

programiranje rekurzivnih algoritama

U međuvremenu, ako na razini slova "nema smisla tražiti smisao", semantika se pojavljuje na razini riječi. Možete dijeliti riječi u glagole, imenice, priloge, prijedloge ... Možete ići dalje i definirati slučaj.

Na razini fraza, semantika se nadopunjuju znakovima interpunkcije i logikom kombinacije riječi. Na razini rečenice nalazi se naprednija razina semantike, a stavak se može promatrati kao cjelovita misao.

Objektno-orijentirani razvoj određuje baštinu svojstava i metoda i daje početni objekt hijerarhiju stvaranjem potpuno apstraktno pretka. U isto vrijeme, bez sumnje, analiza svakog djeteta biti će rekurzivna u prirodi i ne razlikuju se mnogo na tehničkoj razini na mnogim stavkama (slova, riječi, fraze i rečenice). Stavci kao potpuni misli, može se osloboditi iz ovog popisa, ali ne i suštinu.

Važno je da za najveći dio algoritma može se formulirati na razini apstraktne pretka, od izrade na razini svakog djeteta podataka i metoda koji se pozivaju iz apstraktnoj razini. U tom kontekstu, apstrakcija otvara nove horizonte za rekurziju.

Povijesne značajke OOP-a

OOP je dvaput došao u svijet programa, iako neki stručnjaci mogu istaknuti pojavu oblaka tehnologija i modernih ideja o predmetima i klasama, kao novi krug u razvoju IT tehnologija.

Pojmovi „subjekt” i „predmet” u ovom kontekstu PLO, obično pripisuje 50. i 60. godina prošlog stoljeća, ali povezati ih s 1965. i dolaskom Simula jezika, Lisp, Algol, Smalltalk.

U one dane, programiranje nije bilo posve posebno i nije moglo adekvatno odgovoriti na revolucionarne koncepte. Prije borbe s idejama i stilovima programiranja (C / C ++ i Pascal - uglavnom) još je uvijek daleko, a baze podataka i dalje su koncipirane.

rekurzivni rekurzivni algoritmi

U kasnim 80-ima i ranim 90-Pascal pojavio objekte i sve misli o klasama u C / C ++ - on je označio novi krug interesa za PLO, a to je kad su alati, pogotovo programski jezici su postali ne samo podrška objektno-orijentirani ideje, ali i razvijati prema njima.



Naravno, ako prije rekurzivni algoritam je jednostavan funkcija se koristi u općem kodu programa, sada rekurzija mogao postati dio nekog objekta svojstva (klase), u okviru nasljedstva pruža zanimljive mogućnosti.

Značajka modernog OOP-a

Razvoj OOP je u početku objavio objekte (klase) kao zbirku podataka i svojstava (metoda). Zapravo, riječ je o podacima koji imaju sintaksa i značenje. No, nije bilo moguće predstaviti OOP kao alat za upravljanje stvarnim objektima.

rekurzivne funkcije i algoritme

OOP je pretvoren u alat za upravljanje objektima "računalne prirode". Skripta, gumb, stavka izbornika, traka izbornika, oznaka u prozoru preglednika objekt je. Ali ne strojni alat, prehrambeni proizvod, riječ ili ponudu. Pravi objekti ostaju izvan opsega objektno orijentiranog programiranja, a računalni su alati stekli novu inkarnaciju.

Zbog razlika između popularnih programskih jezika, pojavili su se brojni OOP dijalekti. Semantički su praktički jednaka, a njihov fokus na instrumentalne sferi, a ne aplikacija, što ga čini moguće napraviti opis stvarnih objekata izvan algoritama i osigurati njihovu cross-platforma i cross-jezik „postojanje”.

Slojevi i mehanizmi za funkcije pozivanja

Mehanizmi za funkcije poziva (postupci, algoritmi) zahtijevaju prijenos podataka (parametara), vraćaju rezultat i pohranjuju adresu operatera koji mora primiti kontrolu nakon završetka funkcije (procedure).

primjeri rekurzivnih algoritama

Obično se za te svrhe koristi stog, iako programski jezici ili sam programer razvojnog programera mogu pružiti široku paletu mogućnosti prijenosa kontrole. Moderno programiranje omogućuje da naziv funkcije ne može biti samo parametar: može se stvoriti tijekom izvođenja algoritma. Algoritam se također može stvoriti za vrijeme izvršavanja drugog algoritma.

Pojam rekurzivnih algoritama, kada njihova imena i tijela može se utvrditi u trenutku zadatka (odaberite željeni algoritam) recursiveness proteže ne samo o tome kako nešto napraviti, ali tko je točno to treba učiniti. Izbor algoritma za njegovo "smisleno" ime je obećavajuće, ali stvara poteškoće.

Rekurzivnost na skupu funkcija

Ne može se reći da je algoritam rekurzivni kad se zove i samo. Programiranje nije dogma, ali pojam rekurzivnosti nije isključivi uvjet da se izuzmete iz tijela vlastitog algoritma.

Praktične primjene ne pružaju uvijek čisto rješenje. Često se treba pripremiti izvorni podaci, a rezultat rekurzivnog poziva mora se analizirati u kontekstu cijelog zadatka (cijeli algoritam) kao cjeline.

Zapravo, ne samo prije poziva rekurzivne funkcije, već i nakon njegovog završetka, može se ili mora zvati neki drugi program. Ako je izazov bez problema: rekurzivna funkcija A () poziva funkciju B (), što čini nešto i naziva (), a zatim odmah postoji problem s povratka. Nakon ispunjavanja rekurzivnog poziva, funkcija A () treba dobiti kontrolu kako bi ponovno pozvala B (), koja će ga ponovo nazvati. Povratak kontrole, kako slijedi, kako bi se u stog natrag na B () - pogrešna odluka.

Programer nije ograničen izborom parametara i može biti opremljen imenom funkcija. Drugim riječima, idealno je rješenje prenijeti ime B () na A () i neka A () obaviti poziv B (). U tom slučaju, neće biti problema s povratkom kontrole, a provedba rekurzivnog algoritma bit će transparentnija.

Razumijevanje i razina rekurzije

Problem razvijanja rekurzivnih algoritama je da morate imati ideju o dinamici procesa. Prilikom korištenja rekurzije u metode objekta, osobito na razini apstraktnog predaka, pojavljuje se problem razumijevanja vašeg algoritma u kontekstu njegovog vremena izvršenja.

rješenje rekurzivnih algoritama

Trenutno ne postoje ograničenja na razini gniježdenje funkcija i sposobnosti u mehanizmima poziv stog, ali postoji problem razumijevanja za ono što trenutku razina podataka, ili kakvu mjesto u algoritmu za uspostavu poziva od rekurzivne funkcije i na koliko sebe naziva je.

Postojeći alati za uklanjanje pogrešaka često su nemoćni reći programeru da je pravo rješenje.

Ciklusi i rekurzija

Pretpostavlja se da je cikličko izvršenje ekvivalent rekurzivnosti. Doista, u nekim slučajevima, rekurzivni algoritam može se provesti u sintaksi uvjetnih i cikličkih konstrukata.

Međutim, ako postoji jasno razumijevanje da određena funkcija treba biti implementirana pomoću rekurzivnog algoritma, trebate odustati od bilo koje vanjske uporabe petlje ili uvjetnih izjava.

implementacija rekurzivnih algoritama

Stvar je ovdje da rekurzivno rješenje u obliku funkcije koja sama koristi bit će kompletan, funkcionalno kompletan algoritam. Ovaj algoritam će zahtijevati od programatora nastojanja pri izradi, razumijevanje dinamike algoritma, ali to će biti konačno rješenje koje ne zahtijeva vanjsku kontrolu.

Bilo koja kombinacija vanjskih uvjetnih i cikličkih operatera neće nam omogućiti da predstavljaju rekurzivni algoritam u obliku potpune potpune funkcije.

Konsenzus rekurzije i OOP

Gotovo u svim varijantama razvoja rekurzivnog algoritma, planira se razviti dva algoritma. Prvi algoritam čini popis budućih objekata (primjeraka), a drugi algoritam je pravilna rekurzivna funkcija.

Najbolje rješenje bilo bi rekursiranje rekurzije u obliku jednog entiteta (metode) koji zapravo sadrži rekurzivni algoritam, i poduzima sve pripremne radove u konstruktora objekta.

Rekurzivni algoritam će biti samo pravo rješenje kada radi samostalno, bez vanjske kontrole i kontrole. Vanjski algoritam može dati samo signal za rad. Rezultat ovog rada trebao bi biti očekivano rješenje, bez vanjske podrške.

Rekurzija mora uvijek biti potpuna nezavisna odluka.

Intuitivno razumijevanje i funkcionalna cjelovitost

Kada je objektno orijentirano programiranje postalo de facto standard, postalo je očito: za učinkovito kodiranje treba promijeniti svoje vlastito mišljenje. Programer se mora kretati od sintakse i semantike jezika do dinamike semantike tijekom izvođenja algoritma.

Karakteristična značajka rekurzije: može se primijeniti u svemu:

  • raščlanjivanje stranica-
  • pretraživanje operacija-
  • analizirati informacije o tekstu -
  • čitanje ili stvaranje MS Word-
  • uzorkovanje ili analiziranje oznaka ...

Obilježje OOP: to čini moguće opisati rekurzivni algoritam na razini apstraktne pretka, ali su u njoj jedinstveni apel potomaka, od kojih svaka ima svoje podatke palete i svojstva.

koncept rekurzivnih algoritama

Rekurzija je idealna jer zahtijeva funkcionalnu cjelovitost algoritma. OOP poboljšava kvalitetu rekurzivnog algoritma, dajući mu pristup svim jedinstvenim potomcima.

Dijelite na društvenim mrežama:

Povezan
Što je fraktalna analizaŠto je fraktalna analiza
Osnovne vrste i primjeri cikličkih algoritamaOsnovne vrste i primjeri cikličkih algoritama
Kruskalov algoritam - izgradnja optimalnog kosturaKruskalov algoritam - izgradnja optimalnog kostura
Što je rekurzija? Rekurzija u programiranju (primjeri)Što je rekurzija? Rekurzija u programiranju (primjeri)
Rekurzivni pramac: dizajn, prednostiRekurzivni pramac: dizajn, prednosti
Što je algoritam s granama? Primjeri i definicija algoritama grananjaŠto je algoritam s granama? Primjeri i definicija algoritama grananja
"Što je" došlo na stog, "da se" vratilo: apstraktni temelj stvarnosti"Što je" došlo na stog, "da se" vratilo: apstraktni temelj stvarnosti
Teorija i definicija informatikeTeorija i definicija informatike
Vrste algoritama u računalnoj znanosti: primjeriVrste algoritama u računalnoj znanosti: primjeri
Izražajni jаvascript: opis značajkiIzražajni jаvascript: opis značajki
» » Rekurzivni algoritam: opis, analiza, značajke i primjeri
LiveInternet