Скачиваний:
0
Добавлен:
20.09.2026
Размер:
619 Кб
Скачать
☆
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ı.
Tómende rekursiya menen qolaylı sheshiletuǵın “Xanoy minárası” máselesin kóreyik.
Másele. Úsh A, B, C qazıq hám n dana hár túrli ólshemli dóńgelekler bar.
Dóńgelekkerdiń ólshemleri ósiw tártibinde 1 den n ge shekem tártiplestirilgen. Basında barlıq dóńgelekler A qazıqqa 5.3a – súwrettegidey jaylastırılǵan. A qazıqtaǵı barlıq dóńgeleklerdi B qazıqqa, járdemshi C qazıqtan paydalanǵan halda, tómendegi qaǵıydalarǵa ámel qılǵan halda ótkeriw talap etiledi: dóńgeleklerdi birewden kóshiriw kerek hám úlken ólshemli dóńgelekti kishi ólshemli dóńgelek ústine qoyıw múmkin emes.
3-súwret. Xanoy minárası máselesin sheshiw processi
Kórsetpe: dóńgeleklerdi A dan B ǵa tuwrı ótkeriwde 5.3b – súwretlerdegi jaǵday júzege keledi, jańa n dóńgelekti A dan B ǵa ótkeriw máselesi n-1 dóńgelekti A dan C ǵa ótkeriw hámde bir dóńgelekti A dan B ǵa ótkeriw máselesine keledi. Onnan keyin C qazıqtaǵı n-1 dóńgelekti A qazıq járdeminde B qazıqqa ótkeriw máselesi júzege keledi h.t.b.
#include <iostream.h>
void Hanoy(int n, char a = 'A', char b = 'B', char c = 'C')
{
if(n)
{
Hanoy(n-1, a, с, b);
cout<<‛Dóńgelek‛<<a<<‛dan‛<<b<<‛ǵa ótkerilsin\n‛;
Hanoy(n-1, c, b, a);
}
}
int main()
{
unsigned int Dóńgelekler_Sanı;
cout << ‛Hanoy minarası máselesi‛ << endl;
cout << ‛Dóńgelekler sanın kiritiń:‛;
cin >> Dóńgelekler_Sanı;
Hanoy(Dóńgelekler_Sanı);
return 0;
}
Dóńgelekler sanı 3 bolǵanda (Dóńgelekler_sanı = 3) programma ekranǵa dóńgeleklerdi kóshiriw boyınsha ámeller izbe-izligin shıǵaradı:
Dóńgelek A dan B ǵa ótkerilsin
Dóńgelek A dan C ǵa ótkerilsin
Dóńgelek B dan C ǵa ótkerilsin
Dóńgelek A dan B ǵa ótkerilsin
Dóńgelek C dan A ǵa ótkerilsin
Dóńgelek C dan B ǵa ótkerilsin
Dóńgelek A dan B ǵa ótkerilsin
Rekursiya shıraylı, ıqsham kóringeni menen yadtı únemlew hám esaplaw waqtın qısqartıw kóz-qarasınan onı ilajı barınsha iterativ esaplaw menen almastırılǵanı maqul. Máselen, x haqıyqıy sanınıń n-dárejesin esaplawdıń tómendegi sheshim variant salıstırmalı kem resurs talap qıladı (n-pútin belgisiz
san):
double Pútin_Dáreje(double x, int n)
{
double p = 1;
for(int i = 1; i <= n; i++)
p *= x;
return p;
}
Ekinshi tárepten, sonday máseleler bar bolıp, olardı sheshiwde rekursiya júdá qolaylı, hátteki jalǵız usıl esaplanadı. Ásirese grammatikalıq analiz máselelerinde rekursiya júdá qolay esaplanadı.
Qayta júkleniwshi funkciyalar
Ayrım algoritmler berilgenlerdiń hár túrli tiptegi mánisleri ushın qollanılıwı múmkin. Máselen, eki sannıń maksimumın tabıw algoritminde bul sanlar pútin yamasa haqıyqıy tipte bolıwı múmkin. Bunday jaǵdaylarda bul algoritmler ámelge asırılǵan funkciyalar atları birdey bolǵanı maqul. Bir neshe funkciyaǵa birdey at qoyıw, biraq hár túrli tiptegi parametrler menen isletiw funkciyanı qayta júklew
delinedi.
Kompilyator parametrler tipine hám sanına qarap sáykes funkciyanı shaqıradı. Bunday ámeldi “sheshiw ámeli” delinedi hám onıń maqseti
parametrlerge bola tek tuwrı keletuǵın funkciyanı shaqırıw esaplanadı. Eger bunday funkciya tabılmasa kompilyator qátelik haqqında xabar beredi. Funkciyanı anıqlawda funkciya qaytarıwshı mánis tipiniń áhmiyeti joq. Mısal:
#include <iostream.h>
int max(int, int);
char max(char, char);
float max(float, float)
int max(int,int, int);
void main()
{
int a, int b, char c, char d, int k, float x, y;
cin >> a >> b >> k >> c >> d >> x >> y;
cout << max(a,b) << max(c,d) << max(a,b,k) << max(x,y);
}
int max(int i, int j)
{
return (i > j) ? i : j;
}
char max(char s1, char s2)
{
return (s1 > s2) ? s1 : s2;
}
float max(float x, float y)
{
return (x > y) ? x : y;
}
int max(int i, int j, int k)
{
return (i > j) ? (i > k ? i : k;) : ((j > k) ? j : k;);
}
Eger funkciya shaqırılıwında argument tipi onıń prototipindegi tap sol orındaǵı parametr tipine sáykes kelmese, kompilyator onı parametr tipine keltiriwge háreket etedi – bool hám char tiplerin int tipine, float tipin double tipine hám int tipin double tipine ótkeriwge.
Qayta júkleniwshi funkciyalardan paydalanıwda tómendegi qaǵıydalarǵa ámel qılıw kerek:
-qayta júkleniwshi funkciyalar bir kóriniw aymaǵında bolıwı kerek;
-qayta júkleniwshi funkciyalarda kelisim boyınsha parametrler isletilse,
bunday parametrler barlıq qayta júkleniwshi funkciyalarda da isletiliwi hám olar birdey mániske iye bolıwı kerek;
- eger funkciyalar parametrleriniń tipi tek “const” hám “&” belgileri menen parıqlanatuǵın bolsa, bul funkciyalar qayta júklenbeydi.
Соседние файлы в папке 1-semestr