Разлика између рекурзије и итерације
Садржај
Рекурзија и итерација опетовано извршавају скуп упутстава. Рекурзија је када се изјава у функцији опетовано позове. Итерација је када се петља опетовано извршава док контролни услов не постане лажан. Примарна разлика између рекурзије и итерације је та рекурзија је процес, који се увек примењује на функцију. Тхе итерација се примењује на скуп упутстава која желимо да се опетовано извршавамо.
- Упоредни графикон
- Дефиниција
- Кључне разлике
- Закључак
Упоредни графикон
Основе за поређење | Рекурзија | Итерација |
---|---|---|
Основни | Изјава у тијелу функције назива саму функцију. | Омогућава да се скуп упутстава више пута извршава. |
Формат | У рекурзивној функцији, само је услов прекида (основни случај). | Итерација укључује иницијализацију, стање, извршавање изјаве унутар петље и ажурирање (прираста и смањења) контролне варијабле. |
Прекид | Условна изјава је укључена у тело функције да би се функција вратила без рекурзивног позива. | Изјава о итерацији понавља се више пута док се не постигне одређени услов. |
Стање | Ако се функција не конвертира у неко стање звано (основни случај), то води до бесконачне рекурзије. | Ако увјет контроле у итерацијској изјави никад не постане лажан, води до бесконачне итерације. |
Бесконачно понављање | Бесконачна рекурзија може срушити систем. | Бесконачна петља користи ЦПУ циклусе више пута. |
Примењено | За функције се увек примјењује рекурзија. | Итерација се примењује на итерацијске изјаве или „петље“. |
Стацк | Слога се користи за спремање скупа нових локалних варијабли и параметара сваки пут када се функција позове. | Не користи стацк. |
Оверхеад | Рекурзија посједује режијске трошкове поновљених позива функција. | Нема режијских трошкова поновљеног позива функције. |
Брзина | Споро у извођењу. | Брзо извршење. |
Величина кода | Рекурзија смањује величину кода. | Итерацијом се код дуже продужује. |
Дефиниција рекурзије
Ц ++ омогућава функцији да се позива унутар свог кода. То значи да дефиниција функције поседује позив функције према себи. Понекад се назива и „кружна дефиниција“. Скуп локалних променљивих и параметара које функција користи новостворени су сваки пут када се функција позива и спремају се на врху снопа. Али, сваки пут када се функција сама позове, она не ствара нову копију те функције. Рекурзивна функција не смањује значајно величину кода и не побољшава чак ни искоришћење меморије, али има неке у поређењу са итерацијом.
Да бисте прекинули рекурзију, морате да у дефиницију функције укључите изабрану изјаву како би се функција присилила на повратак без давања рекурзивног позива себи. Одсуство изјаве селецт у дефиницији рекурзивне функције омогућиће функцији у бесконачној рекурзији једном позваном.
Разумејмо рекурзију са функцијом која ће вратити фактороријум броја.
инт фацториал (инт број) {инт одговор; иф (нум == 1) {врати 1; } елсе {ансвер = факторски (нум-1) * нум; // рекурзивни позив} повратак (одговор); }
У горњем коду, изјава у другом делу показује рекурзију, јер изјава назива фактор фактор () у коме се налази.
Дефиниција понављања
Итерација је поступак извођења низа упутстава више пута док стање у изјави за итерацију не постане лажно. Изјава о итерацији укључује иницијализацију, поређење, извршавање изјава унутар итерацијске изјаве и коначно ажурирање контролне варијабле. Након ажурирања контролне променљиве он се поново упоређује и процес се понавља док се стање у изјави итерације не покаже лажним. Изјаве за итерацију су петља „фор“, „вхиле“ петља, „до-вхиле“ петља.
Изјава итерације не користи стацк за спремање променљивих. Стога је извршавање итерацијске изјаве брже у односу на рекурзивну функцију. Чак и функција итерације нема надокнаду поновљеног позива функције, који такође чини њено извршавање бржим од рекурзивне функције. Итерација се прекида када услов контроле постане лажан. Одсуство контролног стања у итерацијској изјави може резултирати бесконачном петљом или може проузроковати грешку у састављању.
Разумејмо итерацију везано за горњи пример.
инт фацториал (инт број) {инт одговор = 1; // потребна је иницијализација јер може садржавати вриједност смећа прије иницијализације за (инт т = 1; т> нум; т ++) // итерација {ансвер = одговор * (т); повратак (одговор); }}
У горњем коду, функција враћа фактор фактора броја користећи израз итерације.
- Рекурзија је када се метода у програму више пута позива, а итерација је када се низ упутстава у програму више пута извршава.
- Рекурзивна метода садржи скуп упутстава, позивање изјаве и увјет прекида, док итерацијске изјаве садрже иницијализацију, прираст, стање, скуп упутстава унутар петље и контролну варијаблу.
- Условна изјава одлучује о престанку вредности рекурзије, а вредност променљиве одлучује о престанку изјаве о понављању.
- Ако метода не доведе до стања раскида, улази у бесконачну рекурзију. С друге стране, ако контролна варијабла никада не доводи до закључне вредности, изјава итерације понавља се бесконачно.
- Бесконачна рекурзија може довести до рушења система док, бесконачна итерација троши ЦПУ циклусе.
- За методу се увек примењује рекурзија док се за сет поука примењује итерација.
- Променљиве варијабле створене током рекурзије чувају се у скупу док, итерација не захтева сноп.
- Рекурзија узрокује прекомерно понављање позивања функција док, итерација нема функцију која позива над главом.
- Због функције позива надземно извршавање рекурзије је спорије, док је извршавање итерације брже.
- Рекурзија смањује величину кода док, итерације продужују код.
Закључак:
Рекурзивну функцију је лако написати, али не делује добро у поређењу с итерацијом, док је итерација тешко написати, али је њихова изведба добра у поређењу с рекурзијом.