Atšķirība starp atkārtošanos un atkārtošanos
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.
- Salīdzināšanas tabula
- Definīcija
- Galvenās atšķirības
- Secinājums
Salīdzināšanas tabula
Salīdzināšanas pamats | Rekursija | Iterācija |
---|---|---|
Pamata | Paziņojums funkcijas kopumā izsauc pašu funkciju. | Ļauj atkārtoti izpildīt instrukciju kopu. |
Formāts | Rekursī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šana | Funkcijas 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āvoklis | Ja 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ārtojums | Bezgalīga rekursija var izraisīt sistēmas avāriju. | Bezgalīgā cilpa atkārtoti izmanto CPU ciklus. |
Lietots | Rekursija vienmēr tiek piemērota funkcijām. | Iterācija tiek piemērota iterācijas paziņojumiem vai "cilpām". |
Kaudze | Kaudze tiek izmantota jaunu lokālo mainīgo un parametru kopas glabāšanai katru reizi, kad tiek izsaukta funkcija. | Nelieto steku. |
Virs galvas | Rekursija ir saistīta ar atkārtotu funkciju izsaukumiem. | Nav atkārtotu funkciju izsaukumu. |
Ātrums | Lēna izpilde. | Ātri izpildāms. |
Koda lielums | Rekursija 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.
- Rekursija ir tāda, kad metode programmā sevi atkārtoti izsauc, turpretī iterācija ir tad, ja programmā atkārtoti izpildīts instrukciju komplekts.
- 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.
- Nosacītais paziņojums izlemj par rekursijas izbeigšanu, un kontroles mainīgā lielums izlemj par atkārtojuma izbeigšanu.
- 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.
- Bezgalīga atkārtošanās var izraisīt sistēmas avāriju, turpretī bezgalīga atkārtošanās patērē CPU ciklus.
- Rekursija vienmēr tiek pielietota metodei, turpretī iterācija tiek piemērota instrukciju kopai.
- Rekursijas laikā radītie mainīgie tiek saglabāti kaudzē, turpretī iterācijai kaudze nav nepieciešama.
- Rekursija izraisa atkārtotu funkciju izsaukšanu, turpretim iterācijai nav funkciju, kas izsauktu virs galvas.
- Sakarā ar funkciju izsaukšanu virs galvas rekursijas izpilde ir lēnāka, turpretī iterācijas izpilde ir ātrāka.
- 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.