Увод у рекурзивну функцију у Ц

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

  • Излазни услов: Ово стање помаже функцији да препозна када треба да изађе из те функције. У случају да не одредимо услов излаза, тада ће код ући у бесконачну петљу.
  • Промена бројача: Промена бројача у сваком позиву тој функцији.

На овај начин можемо имплементирати рекурзивну функцију у програмском језику Ц. Ове функције су корисне за решавање математичких проблема са новцем који захтевају сличан поступак да се назове неколико пута. Примери таквих проблема су израчунавање фактората за више генерација Фибонаццијевих серија.

Синтакса:

int fun(a1)
(
If(base_condition) return val;
fun(a2);
)

Како дјелује рекурзивна функција на Ц?

Рекурзивне функције су начин за имплементацију једнаџбе у програмском језику Ц. Рекурзивна функција се позива са аргументом који је пренесен у њу рецимо н, меморија у снопу је додељена локалним променљивим као и функцијама. Све операције присутне у функцији обављају се помоћу те меморије. Услов за излаз се проверава ако испуњава. Када преводилац открије позив другој функцији, одмах додељује нову меморију на врху снопа где се ствара другачија копија истих локалних променљивих и функција се ствара. Унесите исти поступак и даље.

Кад се основни увјет врати истинитим, одређена вриједност прелази у функцију позивања. Меморија додијељена тој функцији се брише. Слично томе, нова вредност се израчунава у функцији позива и ИТ се враћа у функцију супер позивања. На овај начин се обављају рекурзивни позиви за брисање функције досеже прву функцију и целокупна меморија стака се брише, а излаз враћа. У функцији основно стање или услов изласка нису наведени у функцији, тада рекурзивни позиви на функцију могу довести до бесконачне петље.

Пример рекурзивне функције

Сада ћемо видети примере рекурзивне функције у Ц

Шифра:

#include
int fun(int n)
(
if(n==1) return 1 ; //exit or base condition which gives an idea when to exit this loop.
return n*fun(n-1); //function is called with n-1 as it's argument .
//The value returned is multiplied with the argument passed in calling function.
)
int main()(
int test=4;
int result =0;
result =fun(test);
printf("%d", result);//prints the output result.
)

Излаз:

Објашњење горњег кода

Горе наведени пример је проналажење факторорија броја. Када главна функција назове забаву (4), прво се проверава стање излаза (4 == 1), а затим се позива 4 * забава (3). Поново се провјерава основно стање (3 == 1). Слично томе, вратит ће се 3 * забава (2) и то се наставља до 2 * забава (1) се зове и гдје испуњава основни увјет и враћа 1, а затим функција позива враћа 2 * 1, затим, 3 * 2 * 1 и са првог позива 4 * 3 * 2 * 1 се враћа. На тај начин, главна функција складишти 24 и штампа то на излазу.

Додјела меморије рекурзивне функције

Сваки позив на функцију на језику ц резултира расподјелом меморије на врху снопа. Када се рекурзивна функција зове, меморија јој се додељује на врху меморије која је додељена позивајућој функцији са свим различитим копијама локалних променљивих креира се за сваки позив у функцију.
Који је основни услов постигнут, меморија додељена функцији се уништава, а показивач се враћа у позивну функцију? овај поступак се понавља након прве функције позивања и коначно, меморија скупа се празни.

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

Корак 1

Корак 2

Корак - 3

Корак - 4

Корак - 5

Корак - 6

Корак - 7

Корак - 8

Корак - 9

Врсте рекурзије

Постоје две врсте рекурзије у Ц програмирању које су дате у наставку:

1. Реп и реп

Горе наведени тип рекурзије је објашњен у наставку:

  • Рекурзија репова

То је врста рекурзивне функције рекурзијски позив у функцији која је последња радња која је извршена у дефинисању функције. Значи рекурзивни позив настаје након што се примијени сва остала логика у функцији.

Коришћењем рекурзије репа у нашем програму, постиже се рад програма и такође смањује коришћење меморије функције. То је зато што је као што је друга логика у функцији имплементирана у меморију додељену позивајућој функцији могуће уклонити из снопа и поново употријебити.

Шифра:

int fun1(n)(
printf(“the result is “);
return fun1(n-1);
)
void main()
(
fun1(4);
)

  • Репутација без репова

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

Шифра:

int fun1(n)(
printf(“the result is “);
return n* fun1(n-1);
)
void main()(
fun1(4);
)

2. Директна и индиректна рекурзија

Горе наведени тип рекурзије је објашњен у наставку:

  • Индиректна рекурзија

Каже се да је индиректна рекурзија настала када се одређена функција на рекурзивни начин назива медијумом друге функције.

Шифра:

int fun1()(
fun2();
)
int fun2()(
fun1(); // calling the procedure recursively using another function.
)
void main()(
fun1();
)

  • Директна рекурзија

Каже се да се директна рекурзија догађа када је рекурзивни позив функцији извршен у оквиру сопствене дефиниције. '

Шифра:

int fun1()(
fun1();
)
void main()(
fun1();
)

Закључак

Лако се може закључити да су рекурзивне функције најважније за решавање математичких проблема који захтевају да се слична метода више пута примењује све док се не испуни услов изласка. Многи проблеми, попут кула у Ханоју, кретање дрвећем, израчунавање дубине графова.

Важно је напоменути основни услов за рекурзивну функцију. Захтеви за меморију и време су већи за рекурзивни програм у односу на итеративни, па их треба пажљиво користити.

Препоручени чланци

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

  1. Низови у Ц програмирању
  2. Палиндроме ин Ц програм
  3. Обрасци у Ц програмирању
  4. Ц вс Ц ++
  5. Палиндроме у ЈаваСцрипту
  6. Водич за Фибонаццијеве серије у ЈаваСцрипт-у

Категорија: