Peamine erinevus - rekursioon vs iteratsioon
Rekursiooni ja iteratsiooni saab kasutada programmeerimisprobleemide lahendamiseks. Lähenemine probleemi lahendamiseks rekursiooni või iteratsiooni abil sõltub probleemi lahendamise viisist. Peamine erinevus rekursiooni ja iteratsiooni vahel on see, et rekursioon on mehhanism, mis kutsub funktsiooni sama funktsiooni piires, samal ajal kui iteratsioon on käskude komplekti korduv täitmine, kuni antud tingimus on tõene. Rekursioon ja iteratsioon on algoritmide väljatöötamise ja tarkvararakenduste loomise peamised tehnikad.
SISU
1. Ülevaade ja peamine erinevus
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
Mis on rekursioon?
Kui funktsioon kutsub ennast funktsiooni piires, on see tuntud kui rekursioon. Rekursiooni on kahte tüüpi. Need on lõplik rekursioon ja lõpmatu rekursioon. Lõplik rekursioon on lõpetava tingimusega. Lõputul rekursioonil ei ole lõppevat tingimust.
Rekursiooni saab seletada programmi abil faktooride arvutamiseks.
n! = n * (n-1) !, kui n> 0
n! = 1, kui n = 0;
3 (3! = 3 * 2 * 1) arvutamiseks pöörduge allpool toodud koodi poole.
intmain () {
int väärtus = faktoriaal (3);
printf (“Faktor on% d / n”, väärtus);
tagastus 0;
}
teguriteta (intn) {
kui (n == 0) {
tagastus 1;
}
veel {
tagastus n * faktoriaal (n-1);
}
}
Faktooriumi (3) kutsumisel kutsub see funktsioon faktoriaaliks (2). Faktooriumi (2) kutsumisel kutsub see funktsioon faktoriaaliks (1). Siis faktoriaal (1) kutsub faktoriaali (0). faktoriaal (0) tagastab 1. Ülaltoodud programmis on baastingimuseks n == 0 tingimus “if blockis”. Sarnaselt kutsutakse faktorite funktsiooni uuesti ja uuesti.
Rekursiivsed funktsioonid on seotud virnaga. C-s võib põhiprogrammil olla palju funktsioone. Niisiis, main () on kutsumisfunktsioon ja põhiprogrammi poolt kutsutud funktsioon on funktsioon. Funktsiooni kutsumisel antakse kontroll kutsutud funktsioonile. Pärast funktsiooni täitmise lõpetamist tagastatakse juhtelement põhiseadmesse. Siis jätkub põhiprogramm. Niisiis loob see käivitamise jätkamiseks aktiveerimiskirje või korstna raami.
Joonis 01: rekursioon
Ülalnimetatud programmis loob faktoriaalile (3) peaosast helistades aktiveerimiskirje kõnepinu. Seejärel luuakse virna kohale faktoori (2) virna raam ja nii edasi. Aktiveerimiskirje hoiab teavet kohalike muutujate jne kohta. Iga kord, kui funktsiooni kutsutakse, luuakse virna ülaossa uus kohalike muutujate komplekt. Need virnaraamid võivad kiirust aeglustada. Samamoodi rekursi korral kutsub funktsioon ennast. Rekursiivse funktsiooni aja keerukus leitakse kordade arvu järgi, funktsiooni kutsutakse. Ühe funktsioonikõne ajaline keerukus on O (1). N rekursiivsete kõnede arvu korral on aja keerukus O (n).
Mis on kordus?
Iteratsioon on käskude plokk, mida korratakse ikka ja jälle, kuni antud tingimus on tõene. Korduse saab saavutada, kasutades „for loop“, „do-while loop“või „while loop“. "For loop" süntaks on järgmine.
for (initsialiseerimine; tingimus; muuda) {
// avaldused;
}
Joonis 02: „silmuse vooskeemi jaoks”
Esmalt käivitatakse lähtestamise samm. See samm on deklareerida ja initsialiseerida silmusjuhtimise muutujad. Kui tingimus on tõene, täidetakse lokkisulgudes olevad laused. Need avaldused täidetakse seni, kuni tingimus on tõene. Kui tingimus on vale, liigub kontroll järgmise lause peale „for loop”. Pärast tsükli sees olevate lausete täitmist läheb juhtelement jaotist muutma. See on silmuse juhtmuutuja värskendamine. Seejärel kontrollitakse seisundit uuesti. Kui tingimus on tõene, täidetakse lokkisulgudes olevad laused. Nii kordub “for loop”.
Jaos „while loop” täidetakse tsükli sees olevad laused seni, kuni tingimus on tõene.
while (tingimus) {
// avaldused
}
Tsüklis „do-while” kontrollitakse tsükli lõpus olekut. Niisiis, tsükkel täidetakse vähemalt üks kord.
tee {
// avaldused
} while (tingimus)
Programm 3 (3!) Faktori leidmiseks iteratsiooni abil ("tsükli jaoks") on järgmine.
int main () {
intn = 3, faktoriaal = 1;
inti;
jaoks (i = 1; i <= n; i ++) {
faktoriaal = faktoriaal * i;
}
printf (“Factorial on% d / n”, faktorial);
tagastus 0;
}
Millised on rekursiooni ja kordumise sarnasused?
- Mõlemad on probleemi lahendamise tehnikad.
- Ülesande saab lahendada kas rekursioonis või iteratsioonis.
Mis vahe on rekursiooni ja korduse vahel?
Erinev artikkel keskel enne tabelit
Rekursioon vs iteratsioon |
|
Rekursioon on meetod funktsiooni kutsumiseks sama funktsiooni piires. | Iteratsioon on käskude plokk, mis kordub seni, kuni antud tingimus on tõene. |
Ruumi keerukus | |
Rekursiivsete programmide ruumi keerukus on suurem kui kordused. | Ruumi keerukus on iteratsioonides väiksem. |
Kiirus | |
Rekursiooni teostamine on aeglane. | Tavaliselt on iteratsioon kiirem kui rekursioon. |
Seisund | |
Kui lõpetamistingimust pole, võib esineda lõpmatu rekursioon. | Kui tingimus ei muutu kunagi valeks, on see lõpmatu kordus. |
Virn | |
Rekursioonis kasutatakse virna funktsiooni kutsumisel kohalike muutujate salvestamiseks. | Iteratsioonis virna ei kasutata. |
Koodi loetavus | |
Rekursiivne programm on paremini loetav. | Kordusprogrammi on raskem lugeda kui rekursiivset programmi. |
Kokkuvõte - rekursioon vs iteratsioon
Selles artiklis käsitleti rekursiooni ja iteratsiooni erinevust. Mõlemat saab kasutada programmeerimisprobleemide lahendamiseks. Rekursiooni ja iteratsiooni erinevus seisneb selles, et rekursioon on mehhanism, mis kutsub funktsiooni sama funktsiooni piires ja iteratsioon käskude komplekti korduvalt täitma, kuni antud tingimus on tõene. Kui probleemi saab lahendada rekursiivsel kujul, saab selle lahendada ka iteratsioonide abil.
Laadige alla rekursiooni vs iteratsiooni PDF-versioon
Selle artikli PDF-versiooni saate alla laadida ja kasutada võrguühenduseta eesmärkidel, nagu tsiteeritud. Laadige siit alla PDF-versioon. Rekursiooni ja korduse erinevus