Разлика између рекурзије и итерације

Аутор: Laura McKinney
Датум Стварања: 1 Април 2021
Ажурирати Датум: 4 Може 2024
Anonim
[Epizoda 13] Rekurzija
Видео: [Epizoda 13] Rekurzija

Садржај


Рекурзија и итерација опетовано извршавају скуп упутстава. Рекурзија је када се изјава у функцији опетовано позове. Итерација је када се петља опетовано извршава док контролни услов не постане лажан. Примарна разлика између рекурзије и итерације је та рекурзија је процес, који се увек примењује на функцију. Тхе итерација се примењује на скуп упутстава која желимо да се опетовано извршавамо.

  1. Упоредни графикон
  2. Дефиниција
  3. Кључне разлике
  4. Закључак

Упоредни графикон

Основе за поређењеРекурзијаИтерација
ОсновниИзјава у тијелу функције назива саму функцију.Омогућава да се скуп упутстава више пута извршава.
ФорматУ рекурзивној функцији, само је услов прекида (основни случај).Итерација укључује иницијализацију, стање, извршавање изјаве унутар петље и ажурирање (прираста и смањења) контролне варијабле.
ПрекидУсловна изјава је укључена у тело функције да би се функција вратила без рекурзивног позива.Изјава о итерацији понавља се више пута док се не постигне одређени услов.
СтањеАко се функција не конвертира у неко стање звано (основни случај), то води до бесконачне рекурзије.Ако увјет контроле у ​​итерацијској изјави никад не постане лажан, води до бесконачне итерације.
Бесконачно понављањеБесконачна рекурзија може срушити систем.Бесконачна петља користи ЦПУ циклусе више пута.
ПримењеноЗа функције се увек примјењује рекурзија.Итерација се примењује на итерацијске изјаве или „петље“.
СтацкСлога се користи за спремање скупа нових локалних варијабли и параметара сваки пут када се функција позове.Не користи стацк.
ОверхеадРекурзија посједује режијске трошкове поновљених позива функција.Нема режијских трошкова поновљеног позива функције.
БрзинаСпоро у извођењу.Брзо извршење.
Величина кодаРекурзија смањује величину кода.Итерацијом се код дуже продужује.


Дефиниција рекурзије

Ц ++ омогућава функцији да се позива унутар свог кода. То значи да дефиниција функције поседује позив функције према себи. Понекад се назива и „кружна дефиниција“. Скуп локалних променљивих и параметара које функција користи новостворени су сваки пут када се функција позива и спремају се на врху снопа. Али, сваки пут када се функција сама позове, она не ствара нову копију те функције. Рекурзивна функција не смањује значајно величину кода и не побољшава чак ни искоришћење меморије, али има неке у поређењу са итерацијом.

Да бисте прекинули рекурзију, морате да у дефиницију функције укључите изабрану изјаву како би се функција присилила на повратак без давања рекурзивног позива себи. Одсуство изјаве селецт у дефиницији рекурзивне функције омогућиће функцији у бесконачној рекурзији једном позваном.

Разумејмо рекурзију са функцијом која ће вратити фактороријум броја.

инт фацториал (инт број) {инт одговор; иф (нум == 1) {врати 1; } елсе {ансвер = факторски (нум-1) * нум; // рекурзивни позив} повратак (одговор); }

У горњем коду, изјава у другом делу показује рекурзију, јер изјава назива фактор фактор () у коме се налази.


Дефиниција понављања

Итерација је поступак извођења низа упутстава више пута док стање у изјави за итерацију не постане лажно. Изјава о итерацији укључује иницијализацију, поређење, извршавање изјава унутар итерацијске изјаве и коначно ажурирање контролне варијабле. Након ажурирања контролне променљиве он се поново упоређује и процес се понавља док се стање у изјави итерације не покаже лажним. Изјаве за итерацију су петља „фор“, „вхиле“ петља, „до-вхиле“ петља.

Изјава итерације не користи стацк за спремање променљивих. Стога је извршавање итерацијске изјаве брже у односу на рекурзивну функцију. Чак и функција итерације нема надокнаду поновљеног позива функције, који такође чини њено извршавање бржим од рекурзивне функције. Итерација се прекида када услов контроле постане лажан. Одсуство контролног стања у итерацијској изјави може резултирати бесконачном петљом или може проузроковати грешку у састављању.

Разумејмо итерацију везано за горњи пример.

инт фацториал (инт број) {инт одговор = 1; // потребна је иницијализација јер може садржавати вриједност смећа прије иницијализације за (инт т = 1; т> нум; т ++) // итерација {ансвер = одговор * (т); повратак (одговор); }}

У горњем коду, функција враћа фактор фактора броја користећи израз итерације.

  1. Рекурзија је када се метода у програму више пута позива, а итерација је када се низ упутстава у програму више пута извршава.
  2. Рекурзивна метода садржи скуп упутстава, позивање изјаве и увјет прекида, док итерацијске изјаве садрже иницијализацију, прираст, стање, скуп упутстава унутар петље и контролну варијаблу.
  3. Условна изјава одлучује о престанку вредности рекурзије, а вредност променљиве одлучује о престанку изјаве о понављању.
  4. Ако метода не доведе до стања раскида, улази у бесконачну рекурзију. С друге стране, ако контролна варијабла никада не доводи до закључне вредности, изјава итерације понавља се бесконачно.
  5. Бесконачна рекурзија може довести до рушења система док, бесконачна итерација троши ЦПУ циклусе.
  6. За методу се увек примењује рекурзија док се за сет поука примењује итерација.
  7. Променљиве варијабле створене током рекурзије чувају се у скупу док, итерација не захтева сноп.
  8. Рекурзија узрокује прекомерно понављање позивања функција док, итерација нема функцију која позива над главом.
  9. Због функције позива надземно извршавање рекурзије је спорије, док је извршавање итерације брже.
  10. Рекурзија смањује величину кода док, итерације продужују код.

Закључак:

Рекурзивну функцију је лако написати, али не делује добро у поређењу с итерацијом, док је итерација тешко написати, али је њихова изведба добра у поређењу с рекурзијом.