Más contenido relacionado
La actualidad más candente (20)
Lecture 2
- 2. Тодорхойлолт: Өөрөө өөртөө ханддаг дэд алгоритмыг
рекурсив дэд алгорим гэнэ. Өөрөөр хэлбэл рекурсив
алгоритм нь өөрөө өөрийгөө дуудаж ажиллуулдаг. Өөрөө
өөрийгөө дууддаг дэд алгоритмыг шууд рекурсив алгоритм
гэнэ. Харин 2 дэд алгоритм нэг нэгийгээ дуудсан байж
болно. Үүнийг шууд бус рекурсив алгоритм гэнэ.
- 3. Рекурсив алгоритмаар шийдэгдэх аливаа бодлого нь:
1. Уг бодлогыг, түүнтэй ижил боловч түүнээс маш хялбар
бодлогоор сольж дахин тодорхойлох боломжтой байх
2. Шийд нь шууд мэдэгдэж байх эсвэл түүнийг шууд бодож
болох нэг юмуу хэд хэдэн тохиолдол байх. (энэ тохиолдлыг
тухайн бодлогын үндсэн тохиолдол гэнэ.)
3. Хялбар бодлогоор солих үйл ажиллагааг давтаж
хэрэглэхэд уг бодлого түүний үндсэн тохиолдолд заавал хүрдэг
байх.
4. Үндсэн тохиолдлын шийдийг ашиглан анхны
тохиолдлын шийдийг олж болдог байх.
гэсэн 4-н онцлог шинжтэй байна.
- 4. Рекурсив аргаар бодогдох бодлогын үндсэн тохиолдол нь шийд
буюу үр дүнг нь шууд мэдэж байгаа болохоор цаашаа
рекурсивээр дахин тодорхойлох шаардлага, боломжгүй тусгай
тохиолдол юм.
Рекурсив тодорхойлолтонд ядаж нэг үндсэн тохиолдол байх
ёстой ба тэр нь дараах хоёр үүрэгтэй байна. Үүнд:
1. Хялбар бодлогод давтан шилжих процессийг төгсгөх нөхцөл
болно. Ер нь бол шууд тодорхойлогдсон үндсэн тохиолдол
байхгүй бол рекурсив алгоритм нь өөрөө өөртөө төгсгөлгүй
ханданахад хүрнэ.
2. Үндсэн тохиолдлын утга нь анхны бодлогын шийдийг
бодож гаргахад ашиглагдах үндсэн нэгж болно.
- 5. Фиббоначийн дараалал бол бүхэл тоон дараалал. Фиббоначийн
дараалалын элемент бүр нь өмнөх 2 элементийн нийлбэртэй тэнцүү. Энэ
бол Фиббоначийн дараалал: 0,1,1,2,3,5,8,13,21,34..........................
Фиббоначийн функц Fib(n) нь Fib(n-1) ба Fib(n2) 2 функцээр
тодорхойлогдоно.
Үүнийг ерөнхий тохиолдолд бичвэл
Хэрвээ n=0 буюу n=1 тохиолдолд Fib(n)=n
Хэрвээ n>=2 тохиолдолд Fib(n)= Fib(n-1)+ Fib(n-2)
Жишээлбэл (0+1=1, 1+1=2, 1+2=3, 2+3=5……………………………………………)
•
Эхлээд рекурс ашиглалгүйгээр Фиббоначийн дараалалаас тухайн n тоог
олох алгоритм зохиоё.
- 6. #include<conio.h>
#include<stdio.h>
Int Fib(int n);
int n,fib;
main()
{ clrscr();
printf("input any value="); scanf("%d",&n);
printf("result is = %d",fib(n)); } int Fib(int n)
{ int lofib,hifib,fib,x,i;
if (n<=1) return(n);
else lofib=0;
hifib=1;
for (i=2; i<=n; i++)
{ x=lofib;
Lofib=hifib;
Hifib=x+lofib;}
Fib=hifib;
return(fib);
}
- 7. Одоо рекурс ашиглан Фиббоначийн дараалалаас тухайн n тоог олох алгоритм зохиоё.
#include<stdio.h>
#include<conio.h>
int n,m;
int fib_rec(int n);
main()
{ clrscr();
printf("input yny value="); scanf("%d",&n);
printf("result is = %d",fib_rec(n));
return(0);
}
int fib_rec(int n)
{ int x,y,fib;
if (n<=1) return(n);
else {x=fib_rec(n-1);
y=fib_rec(n-2);
fib=x+y; fib=x+y;
return(fib); } }