Atšķirība starp atkārtošanos un atkārtošanos

Autors: Laura McKinney
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 5 Maijs 2024
Anonim
Мои братья 41 серия русская озвучка  (Фрагмент №1) | Kardeşlerim 41  Bölüm 1.Fragmanı
Video: Мои братья 41 серия русская озвучка (Фрагмент №1) | Kardeşlerim 41 Bölüm 1.Fragmanı

Saturs


Gan rekursija, gan iterācija atkārtoti izpilda instrukciju kopu. Rekursija ir tāda, kad paziņojums funkcijā piezvana atkārtoti. Ierācija notiek, kad cilpa atkārtoti tiek izpildīta, līdz kontrolējošais nosacījums kļūst nepatiess. Galvenā atšķirība starp atkārtošanos un atkārtošanos ir tāda, ka: a rekursija ir process, kas vienmēr tiek piemērots funkcijai. iterācija tiek piemērots instrukciju kopumam, kuru mēs vēlamies atkārtoti izpildīt.

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsRekursijaIterācija
PamataPaziņojums funkcijas kopumā izsauc pašu funkciju.Ļauj atkārtoti izpildīt instrukciju kopu.
FormātsRekursīvā funkcijā tiek noteikts tikai izbeigšanas nosacījums (pamata gadījums).Iterācija ietver inicializāciju, nosacījumu, paziņojuma izpildi cilpā un vadības mainīgā atjaunināšanu (palielinājumus un samazinājumus).
IzbeigšanaFunkcijas pamattekstā ir iekļauts nosacīts paziņojums, lai piespiestu funkciju atgriezties, neizpildot rekursijas izsaukumu.Ierācijas paziņojums tiek atkārtoti izpildīts, līdz tiek sasniegts noteikts nosacījums.
StāvoklisJa funkcija nekonverģējas ar kādu nosacījumu, ko sauc par (pamata gadījums), tas noved pie bezgalīgas atkārtošanās.Ja kontroles nosacījums iterācijas paziņojumā nekad nekļūst nepatiess, tas noved pie bezgalīgas iterācijas.
Bezgalīgs atkārtojumsBezgalīga rekursija var izraisīt sistēmas avāriju.Bezgalīgā cilpa atkārtoti izmanto CPU ciklus.
LietotsRekursija vienmēr tiek piemērota funkcijām.Iterācija tiek piemērota iterācijas paziņojumiem vai "cilpām".
KaudzeKaudze tiek izmantota jaunu lokālo mainīgo un parametru kopas glabāšanai katru reizi, kad tiek izsaukta funkcija.Nelieto steku.
Virs galvasRekursija ir saistīta ar atkārtotu funkciju izsaukumiem.Nav atkārtotu funkciju izsaukumu.
ĀtrumsLēna izpilde.Ātri izpildāms.
Koda lielumsRekursija samazina koda lielumu.Iteratācija padara kodu garāku.


Rekursijas definīcija

C ++ ļauj funkcijai piezvanīt sava koda ietvaros. Tas nozīmē, ka funkcijas definīcijai ir funkcijas izsaukšana uz sevi. Dažreiz to sauc arī par “apļveida definīcija“. Vietējo mainīgo un parametru kopa, ko izmanto funkcija, tiek jaunizveidota katru reizi, kad funkcija piezvana pati par sevi, un tiek saglabāta kaudzes augšpusē. Bet katru reizi, kad funkcija piezvana pati par sevi, tā neveido jaunu šīs funkcijas kopiju. Rekursīvā funkcija ievērojami nesamazina koda lielumu un pat neuzlabo atmiņas izmantošanu, taču, salīdzinot ar iterāciju, tā nedaudz uzlabojas.

Lai pārtrauktu rekursiju, funkcijas definīcijā jāiekļauj izvēles paziņojums, lai piespiestu funkciju atgriezties, neveicot rekursīvu zvanu sev. Ja atlasītā paziņojuma nav rekursīvas funkcijas definīcijā, funkcija tiks izsaukta bezgalīgā rekursijā.

Ļaujiet mums saprast rekursiju ar funkciju, kas atgriezīs skaitļa koeficientu.

int faktoriālais (int num) {int atbilde; if (num == 1) {atgriezties 1; } cits {atbilde = faktoriālais (num-1) * num; // rekursīvs izsaukums} atgriešanās (atbilde); }

Iepriekš minētajā kodā paziņojums citā daļā parāda atkārtošanos, jo paziņojums izsauc funkciju koeficientu (), kurā tas atrodas.


Iterācijas definīcija

Iterācija ir process, kurā atkārtoti tiek izpildītas instrukcijas, līdz nosacījums iterācijas paziņojumā kļūst nepatiess. Ierācijas paziņojumā ir ietverta inicializācija, salīdzināšana, atkārtojuma paziņojuma izpilde un, visbeidzot, kontroles mainīgā atjaunināšana. Pēc vadības mainīgā atjaunināšanas to atkal salīdzina, un process atkārtojas, līdz nosacījums iterācijas paziņojumā izrādās nepatiess. Ierācijas paziņojumi ir “for” cilpa, “while” cilpa, “do-while” cilpa.

Atkārtojuma paziņojumā mainīgo lielumu glabāšanai netiek izmantota kaudze. Tādējādi iterācijas paziņojuma izpilde ir ātrāka, salīdzinot ar rekursīvo funkciju. Pat iterācijas funkcijai nav virskārtas atkārtotai funkciju izsaukšanai, kas arī padara tās izpildi ātrāku nekā rekursīvā funkcija. Ierācija tiek pārtraukta, kad kontroles nosacījums kļūst nepatiess. Kontroles nosacījuma neesamība atkārtojuma paziņojumā var radīt bezgalīgu cilpu vai izraisīt kompilācijas kļūdu.

Izpratīsim iterāciju attiecībā uz iepriekš minēto piemēru.

int faktoriālais (int num) {int atbilde = 1; // nepieciešama inicializēšana, jo tajā var būt atkritumu vērtība pirms tās inicializācijas (int t = 1; t> num; t ++) // iterācija {answer = answer * (t); atgriešanās (atbilde); }}

Iepriekš minētajā kodā funkcija atgriež skaitļa koeficientu, izmantojot atkārtojuma atkārtojumu.

  1. Rekursija ir tāda, kad metode programmā sevi atkārtoti izsauc, turpretī iterācija ir tad, ja programmā atkārtoti izpildīts instrukciju komplekts.
  2. Rekursīvā metode satur instrukciju komplektu, paziņojumu izsaukšanu un izbeigšanas nosacījumu, turpretī iterācijas paziņojumi satur inicializāciju, pieaugumu, nosacījumu, instrukcijas kopu cilpā un vadības mainīgo.
  3. Nosacītais paziņojums izlemj par rekursijas izbeigšanu, un kontroles mainīgā lielums izlemj par atkārtojuma izbeigšanu.
  4. Ja metode neizraisa izbeigšanas nosacījumu, tā nonāk bezgalīgā atkārtojumā. No otras puses, ja vadības mainīgais nekad nenodrošina beigu vērtību, atkārtojuma paziņojums atkārtojas bezgalīgi.
  5. Bezgalīga atkārtošanās var izraisīt sistēmas avāriju, turpretī bezgalīga atkārtošanās patērē CPU ciklus.
  6. Rekursija vienmēr tiek pielietota metodei, turpretī iterācija tiek piemērota instrukciju kopai.
  7. Rekursijas laikā radītie mainīgie tiek saglabāti kaudzē, turpretī iterācijai kaudze nav nepieciešama.
  8. Rekursija izraisa atkārtotu funkciju izsaukšanu, turpretim iterācijai nav funkciju, kas izsauktu virs galvas.
  9. Sakarā ar funkciju izsaukšanu virs galvas rekursijas izpilde ir lēnāka, turpretī iterācijas izpilde ir ātrāka.
  10. Rekursija samazina koda lielumu, turpretī iterācijas padara kodu garāku.

Secinājums:

Rekursīvo funkciju ir viegli uzrakstīt, taču tās nedarbojas labi, salīdzinot ar iterāciju, turpretī iterāciju ir grūti uzrakstīt, bet to veiktspēja ir laba, salīdzinot ar rekursiju.