b'\n_START_ARTICLE_\nUodegin\xc4\x97 rekursija\n_START_PARAGRAPH_\nUodegin\xc4\x97 rekursija (angl. tail recursion)\xc2\xa0\xe2\x80\x93 rekursijos atvejis, kai rekursij\xc4\x85 galima pakeisti ciklu (kompiliatorius gali optimizuoti \xc4\xaf steko nenaudojan\xc4\x8dius veiksmus). Uodegin\xc4\x97 rekursija kai kuriose programavimo kalbose (pavyzd\xc5\xbeiui, Scheme) yra b\xc5\xabtinas reikalavimas realizacijai. C kompliatoriai da\xc5\xbenai taip pat sugeba tai atlikti, ta\xc4\x8diau b\xc5\xabtinas optimizacijos \xc4\xafjungimas.\n_START_SECTION_\nPrincipas\n_START_PARAGRAPH_\nPaprastai kvie\xc4\x8diant funkcij\xc4\x85, steke saugomas gr\xc4\xaf\xc5\xbeimo adresas. Ta\xc4\x8diau jeigu kreipinys \xc4\xaf funkcij\xc4\x85 yra paskutinis veiksmas funkcijoje, ir funkcijos \xc4\xaf kuri\xc4\x85 kreipiamasi argument\xc5\xb3 dydis yra toks pats kaip funkcijos, i\xc5\xa1 kurios kreipiamasi, tuomet galima steke palikti anks\xc4\x8diau buvusi\xc4\x85 gr\xc4\xaf\xc5\xbeimo funkcij\xc4\x85, o dabartin\xc4\x97s ne\xc4\xafra\xc5\xa1yti, taigi po kreipimosi, bus i\xc5\xa1 karto gr\xc4\xaf\xc5\xbetama \xc4\xaf auk\xc5\xa1tesn\xc4\x99 funkcij\xc4\x85.\n_START_SECTION_\nPavyzdys\n_START_PARAGRAPH_\nPavyzd\xc5\xbeiai pateikti C kalba. Pirmoji funkcija, naudojanti paprast\xc4\x85 rekursij\xc4\x85:_NEWLINE__NEWLINE_ int factorial(int n) {_NEWLINE_   if (n == 0) {_NEWLINE_     return 1;_NEWLINE_   } else {_NEWLINE_     return n * factorial(n-1);_NEWLINE_   }_NEWLINE_ }_NEWLINE_Anks\xc4\x8diau pateikta funkcija n\xc4\x97ra optimizuojama, kadangi paskutinis sakinys programoje yra ne kreipinys \xc4\xaf funkcij\xc4\x85, o daugybos veiksmas. Kompiliatorius n\xc4\x97ra pakankamai gudrus, kad tai suprast\xc5\xb3. Ta\xc4\x8diau galima funkcij\xc4\x85 perra\xc5\xa1yti taip:_NEWLINE__NEWLINE_ int factorial(int n, int m) {_NEWLINE_   if (n == 0) {_NEWLINE_     return m;_NEWLINE_   } else {_NEWLINE_     return factorial(n-1, n*m);_NEWLINE_   }_NEWLINE_ }_NEWLINE_Tiesa, visus factorial(N) kreipinius reikia pakeisti \xc4\xaf factorial(N, 1), arba nauj\xc4\x85j\xc4\x85 funkcij\xc4\x85 factorial apgaubti kita funkcija, kuri tai daryt\xc5\xb3 automati\xc5\xa1kai. Antrojo tipo funkcijos paskutinis sakinys yra kreipinys \xc4\xaf funkcij\xc4\x85 su tokiais pa\xc4\x8diais argumentais, tad steko vieta gali b\xc5\xabti atlaisvinta prie\xc5\xa1 kreipin\xc4\xaf._NEWLINE_Funkcij\xc5\xb3 perra\xc5\xa1ymas \xc4\xaf \xc5\xa1i\xc4\x85 form\xc4\x85 kartais yra sud\xc4\x97tingas, ta\xc4\x8diau da\xc5\xbenai tai vis tiek papras\xc4\x8diau negu para\xc5\xa1yti efektyv\xc5\xb3 nerekursin\xc4\xaf problemos sprendim\xc4\x85.'