Алгоритм програмчлал
Лекц 10: Рекурс
Багш: М.Цэцэнцэнгэл
Рекурс
● Өөрөө өөрийгөө давтах үзэгдлийг хэлнэ.
● Математик, компьютерын ухаанд түгээмэл
хэрэглэгддэг.
Болор толь дахь рекурс
Болор толь дахь рекурс
Компьютерын ухааны рекурс
● Тухайн бодлогыг бодохдоо өөртэй нь яг
адилхан жижиг бодлогуудын
хариунуудаар боддог аргыг хэлнэ.
● Ихэнх програмчлалын хэлүүд функцээр
рекурсыг хэрэгжүүлдэг.
Рекурс
Өөрөө өөрийгөө дууддаг функц байдлаар
рекурсийг хэрэгжүүлнэ.
Фибоначийн цуваа
● Цувааны эхний хоёр гишүү нь 0, 1 байдаг
● Цувааны гишүүн нь өмнөх хоёр гишүүний
нийлбэртэй тэнцүү байдаг.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
Леонардо Боначчи
● Италийн математикч
(1170-1250)
● Филиус Боначчи =>
Фибоначчи
● Энэтхэгт зохиогдсон
энэ цувааг Европт
дэлгэрүүлжээ.
Фибоначийн цуваа
F(1) = 0
F(2) = 1
F(3) = F(2) + F(1) = 0 + 1 = 1
F(4) = F(3) + F(2) = 1 + 1 = 2
F(5) = F(4) + F(3) = 2 + 1 = 3
F(6) = F(5) + F(4) = 3 + 2 = 5
F(n) = F(n-1) + F(n-2)
Фибоначчийн цуваа
Фибоначчийн цувааны 4 дэх гишүүнийг
олъё.
4 дэх гишүүнийг олохдоо
Санамж
● Рекурс заавал рекурсээс гарах нөхцөлтэй
байх ёстой.
● Өөрөөр хэлбэл төгсгөлгүй рекурс байж
болохгүй.
● Хэрэв төгсгөлгүй рекурс байвал Си
хэлэнд “stack overflow” гэдэг алдааг өгнө.
Си хэлэнд
int fib(int n) {
if(n == 1) return 0;
if(n == 2) return 1;
return fib(n-1) + fib(n-2);
}
Бодлого: Факториал
0! = 1
1! = 1
2! = 1 * 2 = 1! * 2
3! = 1 * 2 * 3 = 2! * 3
4! = 3! * 4
n! = (n - 1)! * n
Бодлого: Факториал
fac(0) = 1
fac(1) = fac(0) * 1 = 1
fac(2) = fac(1) * 2 = 2
fac(3) = fac(2) * 3 = 6
fac(4) = fac(3) * 4 = 24
fac(n) = fac(n-1) * n
Си хэлэнд
int fac(int n)
{
if(n == 0 || n == 1)
return 1;
return fac(n-1) * n;
}
Бодлого
n хүртэлх натурал тоонуудын нийлбэрийг ол.
S(1) = 1
S(2) = S(1) + 2 = 1 + 2 = 3
S(3) = S(2) + 3 = 3 + 3 = 6
S(n) = S(n-1) + n

Лекц 10: (Рекурс)