Programmeerimisprobleemide lahendamiseks saab kasutada rekursiooni ja iteratsiooni. Rekursiooni või iteratsiooni abil probleemi lahendamise viis sõltub probleemi lahendamise viisist. võtme erinevus rekursiooni ja iteratsiooni vahel on see rekursioon on sama funktsiooni funktsiooni kutsumise mehhanism, samal ajal kui iteratsioon on käskude komplekti korduv täitmine, kuni antud tingimus on tõene. Rekursioon ja iteratsioon on peamised tehnikad algoritmide väljatöötamiseks ja tarkvararakenduste loomiseks.
1. Ülevaade ja peamised erinevused
2. Mis on rekursioon
3. Mis on iteratsioon
4. Rekursiooni ja iteratsiooni sarnasused
5. Kõrvuti võrdlus - rekursioon vs iteratsioon tabelina
6. Kokkuvõte
Kui funktsioon nimetab ennast funktsiooni piires, nimetatakse seda rekursiooniks. Rekursioone on kahte tüüpi. Need on piiratud rekursioon ja lõpmatu rekursioon. Piiratud rekursioon on lõpetava tingimusega. Lõpmatu rekursioon ei ole lõpetavat tingimust.
Rekursiooni saab selgitada programmi abil faktoriaalide arvutamiseks.
n! = n * (n-1)!, kui n> 0
n! = 1, kui n = 0;
Faktorite 3 arvutamiseks vaadake lõõtsa koodi (3! = 3 * 2 * 1).
intmain ()
int väärtus = faktoriaal (3);
printf (“Faktoriaal on% d \ n”, väärtus);
tagasi 0;
sisemine (rahvusvaheline)
if (n == 0)
tagasi 1;
veel
tagasi n * faktoriaal (n-1);
Faktoriaalsele (3) helistamisel kutsub see funktsioon faktoriaal (2). Faktoriaalsele (2) helistamisel kutsub see funktsioon faktorit (1). Siis nimetatakse faktoriaaliks (1) faktoriaaliks (0). faktoriaal (0) naaseb 1. Ülaltoodud programmis on n == 0 tingimus tingimusel, kui plokk on põhitingimus. Samamoodi kutsutakse faktoriaalfunktsiooni ikka ja jälle.
Rekursiivsed funktsioonid on seotud virnaga. C-s võib põhiprogrammil olla palju funktsioone. Niisiis, main () on kutsumisfunktsioon ja funktsioon, mida põhiprogramm kutsub, on kutsutud funktsioon. Kui funktsioon kutsutakse, antakse juhtimine kutsutud funktsioonile. Pärast funktsiooni täitmist viiakse juhtimisseade tagasi peamisse. Seejärel jätkub põhiprogramm. Niisiis loob täitmise jätkamiseks aktiveerimisrekordi või virna raami.
Joonis 01: Rekursioon
Ülaltoodud programmis loob faktoriaalile (3) põhinumbrilt helistades aktiveerimiskirje kõnesse. Seejärel luuakse virna peale faktoriaal (2) virnaraam jne. Aktiveerimiskirje hoiab teavet kohalike muutujate jms kohta. Iga kord, kui funktsiooni kutsutakse, luuakse virna ülaosas uus lokaalsete muutujate komplekt. Need virnaraamid võivad kiirendada. Samamoodi nagu rekursioon, kutsub funktsioon ennast ise. Rekursiivse funktsiooni ajaline keerukus leitakse mitu korda, funktsiooni kutsutakse. Ühe funktsioonikõne ajaline keerukus on O (1). N arvu rekursiivsete kõnede korral on aja keerukus O (n).
Iteratsioon on juhiste blokk, mida korratakse ikka ja jälle, kuni antud tingimus on täidetud. Itereerimist saab teha kasutades „silmuse jaoks”, „tegemise ajaks” või „samal ajal”. „Silmuse jaoks” süntaks on järgmine.
jaoks (lähtestamine; tingimus; muutmine)
// avaldused;
Joonis 02: silmusvooskeemi jaoks
Kõigepealt käivitatakse lähtestamise samm. See samm on silmuskontrolli muutujate deklareerimine ja initsialiseerimine. Kui tingimus on tõene, täidetakse lokirullide sees olevad avaldused. Neid avaldusi täidetakse seni, kuni tingimus on tõene. Kui tingimus on vale, liigub kontroll järgmise lause juurde pärast „silmuse” järele. Pärast ahelas olevate avalduste täitmist läheb kontroll jaotise muutmiseks. See on silmukontrolli muutuja värskendamine. Seejärel kontrollitakse uuesti seisukorda. Kui tingimus on tõene, täidetakse lokkis traksides olevad avaldused. Nii itereerib „silmuse jaoks“.
„Kuigi silmus”, silmuse sees olevad avaldused täidetakse, kuni tingimus on tõene.
kuigi (tingimus)
// avaldused
Ajas, mis on tehtud, seisukorda kontrollitakse silmuse lõpus. Niisiis, silmus käivitub vähemalt üks kord.
tee
// avaldused
while (tingimus)
Programm teguri 3 (3!) Leidmiseks iteratsiooni abil (“silmuse jaoks”) on järgmine.
int main ()
intn = 3, faktoriaal = 1;
inti;
jaoks (i = 1; i<=n ; i++)
faktoriaal = faktuaalne * i;
printf (“Faktoriaal on% d \ n”, faktoriaal);
tagasi 0;
Rekursioon vs iteratsioon | |
Rekursioon on sama funktsiooni funktsiooni kutsumise meetod. | Iteratsioon on juhiste plokk, mida korratakse seni, kuni antud tingimus on täidetud. |
Ruumi keerukus | |
Rekursiivsete programmide ruumi keerukus on suurem kui iteratsioonid. | Ruumi keerukus on iteratsioonides väiksem. |
Kiirus | |
Rekursiooni läbiviimine on aeglane. | Tavaliselt on iteratsioon kiirem kui rekursioon. |
Seisund | |
Kui lõpetamise tingimust pole, võib esineda lõpmatu rekursioon. | Kui seisund ei muutu kunagi valeks, on see lõpmatu iteratsioon. |
Stack | |
Rekursioonina kasutatakse virna kohalike muutujate salvestamiseks, kui funktsiooni kutsutakse. | Iteratsioonis virna ei kasutata. |
Koodiloetavus | |
Rekursiivne programm on paremini loetav. | Iteratiivset programmi on raskem lugeda kui rekursiivset programmi. |
Selles artiklis käsitleti rekursiooni ja iteratsiooni erinevust. Mõlemat saab kasutada programmeerimisprobleemide lahendamiseks. Rekursiooni ja iteratsiooni erinevus seisneb selles, et rekursioon on sama funktsiooni funktsiooni kutsumise ja iteratsiooni käskude komplekti korduvaks täitmiseks mehhanism, kuni antud tingimus on tõene. Kui probleemi saab lahendada rekursiivsel kujul, saab selle lahendada ka iteratsioonide abil.
Selle artikli PDF-versiooni saate alla laadida ja seda võrguühenduseta otstarbel kasutada tsitaatide märkuse kohaselt. Laadige alla PDF-versioon siit. Rekursiooni ja iteratsiooni erinevus
1.Punkt, juhendid. “Andmestruktuuride ja algoritmide rekursiooni alused.”, Juhendite punkt, 15. august 2017. Saadaval siin
2.nareshtechnologies. “Rekursioon C-funktsioonides | C keeleõpetus ”YouTube, YouTube, 12. september 2016. Saadaval siin
3.yusuf shakeel. “Rekursiooni algoritm | Faktoriaal - samm-sammuline juhend ”YouTube, YouTube, 14. oktoober 2013. Saadaval siin
1.'CPT-Rekursioon-faktoorne kood'By Pluke - Enda töö, (avalikus omanduses), Commonsis Wikimedia
2.'lülisskeem'il pole ühtegi masinloetavat autorit - oma töö eeldatakse. (CC BY-SA 2.5) Commonsi Wikimedia kaudu