- •9. ÁMELIY SABAQ. REKURSIV FUNKCIYALAR. REKURSIV FUNKCIYALARǴA BAYLANÍSLÍ MÁSELELER SHESHIW.
- •Jumıstıń maqseti: Rekursiv funkciyalar boyınsha ámeliy shınıǵıwlar islew, túsinikke iye bolıw, ózlestiriw.
- •Faktorial ushın: long F(int n)
- •Sonnan keyin “keri” process baslanadı – stekte saqlanǵan mánisler izbe – iz alınadı
- •2-súwret. 4! Esaplaw
- •Hár bir rekursiv múráját qosımsha yad talap etedi – funkciyalardıń lokal obyektleri (ózgeriwshileri)
9. ÁMELIY SABAQ. REKURSIV FUNKCIYALAR. REKURSIV FUNKCIYALARǴA BAYLANÍSLÍ MÁSELELER SHESHIW.
FUNKCIYALARDÍ QAYTA JÚKLEW. PAYDALANÍWSHÍ
KITAPXANASÍN SHÓLKEMLESTIRIW.
Jumıstıń maqseti: Rekursiv funkciyalar boyınsha ámeliy shınıǵıwlar islew, túsinikke iye bolıw, ózlestiriw.
Teoriyalıq bó’lim:
Rekursiv funkciyalar
Joqarıda belgilep ótilgenindey rekursiya dep funkciya denesinde usı funkciyanıń ózin shaqırıwǵa aytıladı. Rekursiya eki túrli boladı:
1.ápiwayı – eger funkciya óz denesinde ózin shaqırsa;
2.qurallı – eger birinshi funkciya ekinshi funkciyanı shaqırsa, ekinshisi bolsa óz náwbetinde birinshi funkciyanı shaqırsa.
Ádette rekursiya matematikada keń qollanıladı. Sebebi kópshilik matematikalıq
formulalar rekursiv anıqlanadı. Mısal ushın faktorialdı esaplaw formulasın
Kórinip turǵanınday náwbettegi mánisti esaplaw ushın funkciyanıń “aldınǵı mánisi” belgili bolıwı kerek. C++ tilinde rekursiya matematikadaǵı rekursiyaǵa uqsas. Bunı joqarıdaǵı mısallar ushın dúzilgen funkciyalarda kóriw múmkin.
Faktorial ushın: long F(int n)
{
if(!n) return 1; else
return n * F(n-1);
}
Berilgen haqıyqıy x sanınıń n-dárejesin esaplaw funkciyası: double Pútin_Dáreje(double x, int n)
{
if(!n) return 1; else
return x * Pútin_Dáreje(x, n-1);
}
Eger factorial funkciyasına n > 0 mánis berilse, tómendegi jaǵday júz beredi: shárt operatorınıń else shaqındaǵı mánisi (n mánisi) stekte eslep qalınadı. Házirshe mánisi belgisiz n – 1 faktorialdı esaplaw ushın usı funkciyanıń ózi n – 1 mánisi menen shaqırıladı. Óz náwbetinde, bul mánis te yadlap qalınadı (stekke jaylastırıladı) hám jáne funkciya shaqırıladı h.t.b. Funkciya n = 0 mánis penen shaqırılǵanda if operatorınıń shárti (!n) shın boladı hám “return 1;” ámeli orınlanıp, tek usı shaqırıw boyınsha 1 mánisi qaytarıladı.
Sonnan keyin “keri” process baslanadı – stekte saqlanǵan mánisler izbe – iz alınadı hám kóbeytiledi: aqırǵı mánis anıqlanǵannan keyin (1), ol onnan aldınǵı saqlanǵan mániske 1 mánisine kóbeytip F(1) mánisi esaplanadı, bul mánis 2 mánisine kóbeytiw menen F(2) tabıladı h.t.b. Process F(n) mánisin esaplawǵa shekem “kóbeytip” baradı. Bul processti, n = 4 ushın factorial sxemasın 2 – súwrette kóriw múmkin:
2-súwret. 4! Esaplaw
sxeması
Rekursiv funkciyalardıń tuwrı ámel etiwi ushın rekursiv shaqırıwlardıń toqtaw shárti bolıwı kerek. Basqa jaǵdayda rekursiya toqtamawı hám óz náwbetinde funkciya jumısı juwmaqlanbawı múmkin. Faktorial esaplawında rekursiv túsiwlerdiń toqtaw shártinde funkciya parametri n = 0 bolıwı esaplanadı.
Hár bir rekursiv múráját qosımsha yad talap etedi – funkciyalardıń lokal obyektleri (ózgeriwshileri) ushın hár bir múrájátta stekten jańadan orın ajıratıladı. Máselen, rekursiv funkciyaǵa 100 mártebe múráját bolsa, jámi 100 lokal obyektlerdiń kompleksi ushın orın ajıratıladı. Ayrım jaǵdaylarda, yaǵnıy rekursiyalar sanı jeterli dárejede úlken bolǵanda, stek ólshemi sheklengenligi sebepli ol tolıp ketiwi múmkin. Bul jaǵdayda programma óz jumısın “Stek tolıp ketti” xabarı menen toqtatadı.