Содержание
- 3. Обчислення факторіала factorial(n) := n! := n * (n-1) * … * 2 * 1
- 4. Типова ітеративна реалізація функції обчислення факторіалу на С++: int factorial_iter (int n) { int i, f=1;
- 5. Рекурсивне визначення
- 6. Рекурсивне визначення Рекурсивна реалізація обчислення факторіалу int factorial_rec (int n) { if(n == 1) return 1;
- 7. Ітеративна версія int factorial_iter (int n) { int i, f=1; for(i=1; i return f; } Виконання
- 8. Рекурсивна версія int factorial_rec(int n) { If (n == 1) return 1; else return n *
- 9. Приклад: обчислення для numb=3. fac(3) : int fac(int numb){ if(numb==1) return 1; else return numb *
- 10. Обчислення 3! Крок 2: Push: fact(3) main() fact(3) Крок 3: Push: fact(2) Всередині findFactorial(3): if (number
- 11. Що таке рекурсія? Цикл без оператора циклу Функція, яка є частиною власного визначення Може працювати лише
- 12. Як здійснюється рекурсія Кожен раз, коли викликається функція, значення функції, локальні змінні, параметри та адреси зберігаються
- 13. Якщо ми використовуємо ітерацію, то повинні бути обережні, щоб випадково не створити нескінченний цикл : for(int
- 14. Аналогічно, якщо ми використовуємо рекурсію, то повинні бути обережними, щоб не створити нескінченний ланцюжок викликів функцій:
- 15. Типи рекурсії Алгоритм рекурсії може бути реалізовним більш ніж одним способом. Можливі варіанти рекурсії це лінійна,
- 16. Лінійна рекурсія Лінійна рекурсія - це найпростіший вид рекурсії і можливо найуживаніша рекурсія. У цієї рекурсії,
- 17. Хвостова рекурсія Хвостова рекурсія - це спеціальна форма лінійної рекурсії, де рекурсивний виклик зазвичай іде останнім
- 18. Двійкова рекурсія У двійковій рекурсії функція викликає себе двічі, замість одного разу. Такий тип рекурсії дуже
- 20. Числа Фібоначчі: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ... де кожне число
- 21. Обчислення числа Фібоначчі ітеративно (без рекурсії): int fib(int n) { int f[100]; f[0] = 0; f[1]
- 23. //Обчислити число Фібоначчі, використовуючи рекурсію int fib(int number) { if (number == 0) return 0; //зупинка
- 24. Якщо уважно подивитися на рекурсивне дерево, то видно, що функція обчислюється двічі для f(3), тричі для
- 25. Отже, для обчислення кожного числа Фібоначчі (крім двох перших) виконується два виклики функції. Тобто. якщо нам
- 27. На малюнку кольором виділені ті блоки, обчислення яких справді необхідне. Число таких блоків зростає зі збільшенням
- 28. Вкладена рекурсія Це особливий тип рекурсії, коли рекурсивні виклики вкладені. В усіх попередніх типах рекурсії, ви
- 29. РЕКУРСІЯ ЗСЕРЕДИНИ Це може здатися надзвичайним, але cамовиклик функції нічим не відрізняється від виклику іншої функції.
- 30. Обопільна рекурсія Обопільна рекурсія також відома як непряма рекурсія. В цьому типі рекурсії, дві або більше
- 31. Як написати рекурсивну функцію?
- 32. Приклад 1. x ^ y int pow(int x,int y) { if(y==0) return 1; else return x*pow(x,y-1);
- 33. Приклад 2. Перевести натуральне число Z у вiсiмкову систему числення void Convert8(int Z) { if (Z
- 34. Приклад 3. Інверсія заданого рядка 1 спосіб void Inverse(char s[]) { if (strlen(s) > 1) {
- 35. Приклад 3. Інверсія заданого рядка 2 спосіб void Inverse(char s[], int l, int r) { char
- 36. Приклад 4. Поділ навпіл
- 39. Приклад 5. Визначення Hailstone Sequence введеного числа Правило: Якщо поточне число парне, його треба розділити на
- 40. Тестові дані: Введіть будь-яке натуральне число для Hailstone Sequence : 13 Очікуваний результат : The hailstone
- 42. Гра Ханойська вежа #include using namespace std; void towerOfHanoi(int n, char from_rod, char to_rod, char aux_rod)
- 46. Розглянемо алгоритм малювання деревця. Якщо кожну лінію вважати вузлом, це зображення цілком задовольняє визначенню дерева. Малювання
- 49. let c = canvas.getContext('2d'), w = canvas.width, h = canvas.height let formula = (x, y, cx,
- 50. Формула для нього виглядає так: де z - це комплексне число: У цьому прикладі значення c
- 54. https://uk.javascript.info/recursion http://programming.in.ua/programming/c-plus-plus/313-recursion-c-plus-plus.html
- 55. РЕКУРСИВНІ СТРУКТУРИ ДАНИХ Стек можна визначити рекурсивно: Порожній стек. Верхівка стека; стек Чергу можна визначити рекурсивно:
- 56. Контрольні запитання умовну для визначення числа (n-1) розгалужену для добутку n*(n-1) лінійну для добутку n*(n-1) рекурсивну
- 57. О(1) O(6) O(n) O(6*n) O(log n) O(n^2) O(2^n) 2. Яка складність обчислення шостого по порядку числа
- 58. Помилки немає Потрібен цикл Невідповідність типів Нескінченний ланцюжок викликів функцій 3. Яка помилка цього програмного коду?
- 59. Помилки немає Потрібен цикл Невідповідність типів Нескінченний ланцюжок викликів функцій 4. Яка помилка цього програмного коду?
- 60. лінійна умовна циклічна хвостова обопільна двійкова вкладена стекова 5. Яка типи рекурсії існують?
- 61. лінійна умовна циклічна хвостова обопільна двійкова вкладена стекова 6. Який це тип рекурсії? int Factorial(int n)
- 62. лінійна умовна циклічна хвостова обопільна двійкова вкладена стекова 7. Який це тип рекурсії? int Factorial(int n,
- 63. лінійна умовна циклічна хвостова обопільна двійкова вкладена стекова 8. Який це тип рекурсії? int Fib(int no)
- 64. лінійна умовна циклічна хвостова обопільна двійкова вкладена стекова 9. Який це тип рекурсії? bool isEven(int no)
- 65. До наступної лекції Лектор: к.т.н. Трофименко О.Г.
- 67. Скачать презентацию