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