WorksheetsРекурсия тақырыбы бойынша тест
Total questions: 20
Worksheet time: 10mins
Рекурсия деген не?
Бір функцияның өзін-өзі шақыруы
Айнымалыны көбейту
Массивті сұрыптау
Цикл санын арттыру
Рекурсивті функцияның екі негізгі бөлігі:
Цикл және шарт
База (base case) және рекурсивті қадам
Айнымалы және массив
Сынып және объект
База (base case) не үшін керек?
Кодты әдемілеу үшін
Функцияны жылдамдату үшін
Шексіз шақыруды тоқтату үшін
Айнымалы санын көбейту үшін
Рекурсивті қадамның мақсаты:
Мәселені сол түрдегі кішігірек мәселеге азайту
Кездейсоқ мән беру
Айнымалыларды нөлдеу
Экранды тазалау
Әр шақыруда мәселе не болуы тиіс?
Тең қалу
Үлкею
Кішірею (базаға жақындау)
Әсірелеу
Рекурсия анықтамасы
Функцияның өзін-өзі шақыруы
Айнымалыға мән беру
Бағдарламаны құрастыру
Консольді тазалау
База (base case) деген не?
Рекурсивті шақыруды тоқтататын шарт (тоқтау нүктесі)
Әр шақыруда айнымалыны көбейту ережесі
Циклдің басы
Жадыны босату тәсілі
Қай нұсқа дұрыс?
Рекурсиясыз ештеңе шешілмейді
Рекурсия мен итерация кей есептерде алмастырылуы мүмкін
Рекурсия әрқашан тез
Итерация әрқашан қате
Төмендегі қайсысы рекурсивті анықтамаға сай?
S(n)=S(n)+1
F(n)=F(n-1)+1, база: F(0)=0
G(n)=n*n
H(n)=n+2 (база жоқ)
Қай жағдайда рекурсияны таңдау ыңғайлы?
Қарапайым бір цикл керек болса
Ағаш/тармақ құрылымын өңдеу, өзін қайталайтын үлгі болса
Айнымалы атауын ауыстыру керек болса
Консолды тазарту керек болса
Рекурсивті функцияда return не үшін қажет?
Айнымалы жариялау
Шақыруды тоқтатып, мән қайтару үшін
Цикл бастау үшін
Жад босату үшін
Кодтың шығысы қандай? int Sum1ToN(int n) { if (n <= 0) return 0; // база return n + Sum1ToN(n - 1); } Console.WriteLine(Sum1ToN(4));
4
6
10
24
Кодтың шығысы қандай? void PrintDown(int n) { if (n <= 0) return; // база Console.Write(n + " "); PrintDown(n - 1); } PrintDown(3);
1 2 3
3 2 1
3 1 2
Ештеңе шықпайды
Кодтың шығысы қандай? void PrintUp(int n) { if (n <= 0) return; PrintUp(n - 1); Console.Write(n + " "); } PrintUp(3);
3 2 1
1 2 3
2 1 3
Ештеңе
Кодтың шығысы қандай? int DigitSum(int n) { n = n < 0 ? -n : n; if (n < 10) return n; return (n % 10) + DigitSum(n / 10); } Console.WriteLine(DigitSum(507));
12
7
5
0
Кодтың шығысы қандай? int PowPos(int a, int n) { if (n <= 0) return 1; // база return a * PowPos(a, n - 1); } Console.WriteLine(PowPos(2, 4));
8
16
32
4
Берілген функция: int Fib(int n) { if (n < 0) return 0; // теріске 0 if (n < 2) return n; // база return Fib(n - 1) + Fib(n - 2); } Console.WriteLine(Fib(6)); Шығысы қандай болады?
5
8
13
21
Практикалық тапсырмалар 18. Тапсырма: Сан цифрларын санау Функция: int CountDigits(int n) { n = n < 0 ? -n : n; if (n < 10) return 1; return 1 + CountDigits(n / 10); } Input: n = 1205 → Output?
2
3
4
5
19. Берілген функция: int Sum1ToN(int n) { if (n <= 0) return 0; return n + Sum1ToN(n - 1); } Console.WriteLine(Sum1ToN(4)); Нәтиже қандай?
4
6
10
24
20. Тапсырма: Палиндром ба? (шеттерден ішке) Функция: bool IsPal(string s, int l = 0, int r = -1) { if (s == null) return false; if (r == -1) r = s.Length - 1; if (l >= r) return true; // база: ортасына жеттік if (s[l] != s[r]) return false; return IsPal(s, l + 1, r - 1); } Input: s = "level" → Output?
false
true
1
Ештеңе шықпайды
