Рецоммендед, 2020

Избор Уредника

Разлика између рекурзије и понављања

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

Цомпарисон Цхарт

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

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

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

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

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

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

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

Дефиниција итерације

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

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

Хајде да разумемо итерацију у односу на горњи пример.

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

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

Кључне разлике између рекурзије и понављања

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

Закључак:

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

Top