Rekursija ir pakartojimas gali būti naudojami programavimo problemoms spręsti. Problemos sprendimo būdas pasikartojant ar kartojant priklauso nuo problemos sprendimo būdo. pagrindinis skirtumas tarp rekursijos ir iteracijos yra tai rekursija - tai tos pačios funkcijos funkcijos iškvietimo mechanizmas, o pasikartojimas - pakartoti instrukcijų rinkinį, kol duota sąlyga bus tikra.. Rekursija ir pakartojimas yra pagrindiniai algoritmų kūrimo ir programinės įrangos kūrimo būdai.
1. Apžvalga ir svarbiausias skirtumas
2. Kas yra rekursija
3. Kas yra pakartojimas
4. Rekursijos ir pakartojimo panašumai
5. Šalutinis palyginimas - rekursija ir kartojimas lentelės forma
6. Santrauka
Kai funkcija vadinasi pati funkcija, ji vadinama rekursija. Yra du rekursijos tipai. Tai yra baigtinė rekursija ir begalinė rekursija. Ribinis pasikartojimas turi nutraukiamąją būklę. Begalinis pasikartojimas neturi nutraukiamosios būklės.
Rekursija gali būti paaiškinta naudojant programą faktorių skaičiavimui.
n! = n * (n-1) !, jei n> 0
n! = 1, jei n = 0;
Norėdami apskaičiuoti koeficientą 3 (3! = 3 * 2 * 1), naudokitės dumplės kodu..
intmain ()
int reikšmė = faktorinė (3);
printf („Faktorinė vertė yra% d \ n“, vertė);
grįžti 0;
intfaktorinis (intn)
if (n == 0)
grįžti 1;
Kitas
grąža n * faktorinė (n-1);
Skambinant faktorialu (3), ši funkcija iškvies faktorialiu (2). Skambinant faktorialu (2), ši funkcija iškvies faktorialiu (1). Tada faktorialus (1) vadinsis faktorialiu (0). koeficientas (0) grįš 1. Aukščiau pateiktoje programoje n == 0 sąlyga „jei bloke“ yra pagrindinė sąlyga. Pagal Panašiai, faktorinė funkcija vėl ir vėl vadinama.
Rekursyvinės funkcijos yra susijusios su kaminu. C dalyje pagrindinė programa gali atlikti daugybę funkcijų. Taigi, pagrindinė () yra iškvietimo funkcija, o funkcija, kurią iškviečia pagrindinė programa, yra iškvietimo funkcija. Kai funkcija iškviečiama, valdymas suteikiamas iškviečiamai funkcijai. Užbaigus funkcijos vykdymą, valdymas grąžinamas į pagrindinį. Tada tęsiama pagrindinė programa. Taigi, sukuria aktyvavimo įrašą arba kamino rėmelį, kad būtų galima tęsti vykdymą.
01 paveikslas: Rekursija
Aukščiau pateiktoje programoje, skambinant faktorialui (3) iš pagrindinės, jis sukuria aktyvavimo įrašą skambučių krūvoje. Tada viršuje sukuriamas faktorinis (2) kamino rėmelis ir pan. Aktyvavimo įraše saugoma informacija apie vietinius kintamuosius ir tt Kiekvieną kartą, kai šaukiama funkcija, krūvos viršuje sukuriamas naujas vietinių kintamųjų rinkinys. Šie rietuvių rėmai gali sulėtinti greitį. Panašiai kaip ir rekursijoje, funkcija vadina save. Rekursyvinės funkcijos laiko sudėtingumas nustatomas pagal kartų skaičių, funkcija iškviečiama. Vienos funkcijos skambučio laiko sudėtingumas yra O (1). N rekursinių skambučių skaičiaus laiko sudėtingumas yra O (n).
Iteracija - tai instrukcijų blokas, kuris kartojamas vėl ir vėl, kol duota sąlyga išsipildys. Iteracija gali būti atliekama naudojant „for loop“, „do-while loop“ arba „while loop“. „Loop“ sintaksė yra tokia.
for (inicializacija; sąlyga; modifikuoti)
// teiginiai;
02 pav.: „Kontūro srauto diagrama“
Pirmiausia atliekamas inicializacijos žingsnis. Šis žingsnis yra deklaruoti ir inicijuoti kontūro valdymo kintamuosius. Jei sąlyga teisinga, teiginiai garbanotų petnešų viduje vykdomi. Tie pareiškimai vykdomi tol, kol sąlyga nebus įvykdyta. Jei sąlyga klaidinga, valdiklis pereina prie kito teiginio po „už kilpos“. Vykdydami pareiškimus kilpos viduje, valdiklis eina į modifikavimo skyrių. Tai yra atnaujinti kontūro valdymo kintamąjį. Tada būklė dar kartą tikrinama. Jei sąlyga teisinga, teiginiai garbanotų breketų viduje bus įvykdyti. Tokiu būdu kartojama „už kilpą“.
„Nors kilpa“, sakiniai kilpos viduje vykdomi tol, kol sąlyga bus teisinga.
o (sąlyga)
// teiginiai
„Darant kol“ kilpa, būklė patikrinama kilpos gale. Taigi, kilpa vykdoma bent kartą.
daryti
// teiginiai
o (sąlyga)
Programa, skirta surasti 3 (3!) Koeficientą naudojant iteraciją („už kilpos“) yra tokia.
int pagrindinis ()
intn = 3, koeficientas = 1;
inti;
už (i = 1; i<=n ; i++)
faktorialus = faktorialus * i;
printf („Faktorinė yra% d \ n“, faktorinė);
grįžti 0;
Rekursija vs pakartojimas | |
Rekursija yra tos pačios funkcijos funkcijos iškvietimas. | Iteracija yra instrukcijų blokas, kuris kartojamas tol, kol duota sąlyga tampa tikra. |
Erdvės sudėtingumas | |
Rekursyvių programų erdvės sudėtingumas yra didesnis nei kartojimų. | Kosmoso sudėtingumas yra mažesnis kartojant. |
Greitis | |
Rekursijos vykdymas lėtas. | Paprastai iteracija yra greitesnė nei rekursija. |
Būklė | |
Jei nėra nutraukimo sąlygų, gali būti begalinis pasikartojimas. | Jei būklė niekada netaps melaginga, tai bus begalinė iteracija. |
Stack | |
Rekursijos metu rietuvė naudojama vietiniams kintamiesiems laikyti, kai šaukiama funkcija. | Esant iterai, krūva nenaudojama. |
Kodo skaitomumas | |
Rekursyvinė programa yra labiau skaitoma. | Pakartotinę programą sunkiau perskaityti nei rekursinę. |
Šiame straipsnyje buvo aptariamas skirtumas tarp rekursijos ir iteracijos. Abu gali būti naudojami sprendžiant programavimo problemas. Skirtumas tarp rekursijos ir iteracijos yra tas, kad rekursija yra mechanizmas, kuris iškviečia tą pačią funkciją atitinkančią funkciją ir kartoja ją tam, kad pakartotinai vykdytų instrukcijų rinkinį, kol duota sąlyga bus teisinga. Jei problemą galima išspręsti rekursyvia forma, ją taip pat galima išspręsti naudojant iteracijas.
Galite atsisiųsti šio straipsnio PDF versiją ir naudoti ją neprisijungus, kaip nurodyta citatos pastaboje. Atsisiųskite PDF versiją čia. Rekursijos ir pakartojimo skirtumas
1.Point, vadovėliai. „Duomenų struktūrų ir algoritmų rekursijos pagrindai“. Vadovėlis, 2017 m. Rugpjūčio 15 d. Galima rasti čia
2.nareshtechnologies. „Rekursija atliekant C funkcijas | C kalbos mokymo programa “„ YouTube “,„ YouTube “, 2016 m. Rugsėjo 12 d. Galima rasti čia
3.yusuf šakeel. „Rekursijos algoritmas | „Factorial“ - žingsnis po žingsnio vadovas “„ YouTube “,„ YouTube “, 2013 m. Spalio 14 d. Galima rasti čia
1.'CPT-Rekursija-Faktorinis kodas'By Pluke - Nuosavas darbas, (viešasis domenas) per „Commons Wikimedia“
2. „Už ciklo diagramos“ Negalima pateikti kompiuterio skaitomo autoriaus - prisiimamas jo paties darbas. (CC BY-SA 2.5) per „Commons Wikimedia“