Рекурзија

  • Креатор на темата Креатор на темата Despod
  • Време на започнување Време на започнување
Член од
8 октомври 2011
Мислења
65
Поени од реакции
48
Дали може некој да ми објасни за рекурзија во C со некој краток пример?
 
Дали може некој да ми објасни за рекурзија во C со некој краток пример?
Да. Рекурзија ти е непрописно паркиран пајак :pos::pos::pos: или пак напиши на google "recursion" без наводниците и ќе ти се разјасни што е. Ти пишува Did you mean: recursion :)
 
Рекурзија ти е функција во функција. Значи имаш еден проблем и за да го решиш тој проблем го делиш на повеќе помали подпроблеми и при тоа ја користиш истата функција.

На пример, наједноставен пример ти е факториел на некој број:

нека n=5

int faktoriel (int n)
{
if(n<2) return 1;
else return n*fakt(n-1);
}

Значи прво проверуваме за n=0 , бројот е помал од 2, значи како резултат ќе ти врати 1 зашто факториел од 0 е 1.
После проверуваме за 1, 1 е помало од 2, пак како резултат враќа 1 зашто факториел од 1 е 1.
Сега проверуваме за 2, 2 не е помало од 2, значи влагаме во else циклусот и пресметуваш 2*fakt(2-1)=2*fakt(1)=2.
Па за 3, пак си во else, 3*fakt(3-1)...
... и се така до n. Значи гледаш, го множиш бројот n и пак ја повикуваш истата функција за да го најдеш следниот број што треба да го помножиш.
Така на пример ако имаш факториел од 35 ќе добиеш 35* факториел(34), па во следната интеракција имаш 35*34* факториел(33) итн.
 
^ Лошо објаснување
Рекурзија, најпросто кажано, ти е функција која се повикува самата себеси.
 
^ Лошо објаснување
Рекурзија, најпросто кажано, ти е функција која се повикува самата себеси.

Па истото го кажав ама на најпрост начин за да може да ме сфати и барем малку да му се разјасни. Ако објаснувам на повисоко ниво ништо нема да сфати... ама ако е лошо објаснувањето дај свое, преку пример како што замоли дечкото
 
Па истото го кажав ама на најпрост начин за да може да ме сфати и барем малку да му се разјасни. Ако објаснувам на повисоко ниво ништо нема да сфати... ама ако е лошо објаснувањето дај свое, преку пример како што замоли дечкото

Па не е баш функција во функција. Функција во функција би било ова:

int faktoriel (int n)
{
int faktoriel1 (int n)
{

}
}
 
Па не е баш функција во функција. Функција во функција би било ова:

int faktoriel (int n)
{
int faktoriel1 (int n)
{

}
}

Знам, погрешно се изразив ама не знаев како наједноставно да му објаснам преку форум, а и незнам што точно не му е јасно, али ете за појасно функција што се повикува сама себе, ама тоа ваљда знае, претпставуем дека функционирањето не му е јасно.
 
Рекурзија се сфаќа најубаво со слика пр како оваа :
anigif_sad-keanu-recursion-15772-1282826786-3.gif


:icon_lol:
 
Рекурзија ти е функција во функција. Значи имаш еден проблем и за да го решиш тој проблем го делиш на повеќе помали подпроблеми и при тоа ја користиш истата функција.

На пример, наједноставен пример ти е факториел на некој број:

нека n=5

int faktoriel (int n)
{
if(n<2) return 1;
else return n*fakt(n-1);
}

Значи прво проверуваме за n=0 , бројот е помал од 2, значи како резултат ќе ти врати 1 зашто факториел од 0 е 1.
После проверуваме за 1, 1 е помало од 2, пак како резултат враќа 1 зашто факториел од 1 е 1.
Сега проверуваме за 2, 2 не е помало од 2, значи влагаме во else циклусот и пресметуваш 2*fakt(2-1)=2*fakt(1)=2.
Па за 3, пак си во else, 3*fakt(3-1)...
... и се така до n. Значи гледаш, го множиш бројот n и пак ја повикуваш истата функција за да го најдеш следниот број што треба да го помножиш.
Така на пример ако имаш факториел од 35 ќе добиеш 35* факториел(34), па во следната интеракција имаш 35*34* факториел(33) итн.

Функција во функција е малку чудна дефиниција, повеќе би кажал дека рекурзивна функција е онаа кое во своето извршување се повикува самата себе. Пошироки и подетални објаснувања има на тони на интернет. За мене битен момент е дека не се што може да се изведе со рекурзија е паметно така да се направи (иако многумина одат на рекурзија од прва). Рекурзијата не секогаш има подобри перформанси од нерекурзивното решавање на проблемот, што може да се утврди само со експериментирање при решавањето.
Патем, во примерот за истиот да е точен името на функцијата треба да биде fakt наместо faktoriel.

Едит ... така кој прави кафе па се враќа да пишува одговор ... во меѓувреме 100 одговори кои веќе го покриле она што се мачев да го напишам :)
 
денес дознав нов збор и неговото значење...
фала форумџии ;)
 
Функција во функција е малку чудна дефиниција, повеќе би кажал дека рекурзивна функција е онаа кое во своето извршување се повикува самата себе. Пошироки и подетални објаснувања има на тони на интернет. За мене битен момент е дека не се што може да се изведе со рекурзија е паметно така да се направи (иако многумина одат на рекурзија од прва). Рекурзијата не секогаш има подобри перформанси од нерекурзивното решавање на проблемот, што може да се утврди само со експериментирање при решавањето.
Патем, во примерот за истиот да е точен името на функцијата треба да биде fakt наместо faktoriel.

Едит ... така кој прави кафе па се враќа да пишува одговор ... во меѓувреме 100 одговори кои веќе го покриле она што се мачев да го напишам :)

Само да дополнам дека рекурзијата ретко кога има подобри перформанси од нерекурзивното решение, барем во императивните јазици. Предноста е во тоа што некогаш рекурзивното решение е поочигледно и далеку поедноставно.
 
За да сфатиш што е рекурзија , треба да сфатиш што е рекурзија :)
 

Kajgana Shop

Back
На врв Bottom