Page 28 - 4800
P. 28

ЛАБОРАТОРНА РОБОТА № 3
                      РЕКУРСІЯ І РЕКУРСИВНІ ПРОЦЕДУРИ В ПРОЛОЗІ

                   Мета  роботи:  ознайомитися  з  рекурсією,  як  з  алгоритмічним  методом,  та  її
            особливостями в Пролог-програмах вивчити способи побудови рекурсивних процедур
            та забезпечення цілісності відносин.

                   3.1 Визначення поняття рекурсії

                   Рекурсія  –  алгоритмічний  метод,  що  часто  використовується  у  Пролозі.
            Рекурсію застосовують для тих самих цілей, що і циклічні конструкції в процедурних
            мовах.  У  рекурсивних  правилах  більш  складні  вхідні  аргументи  виражаються  через
            менш  складні.  Наприклад,  рекурсивний  набір  інструкцій  з  завантаження  контейнерів
            може мати такий вид:
                   Для того, щоб завантажити N контейнерів, потрібно:
                   Якщо N=0, то зупинитися.
                   Якщо  N>0,  то  завантажити  один  контейнер,  потім  завантажити  ще  N–1
            контейнер.
                   Будемо  вважати,  що  тут  дано  визначення  процедури  “завантаження  N
            контейнерів”, де N – аргумент процедури і позначає деяке ціле число.
                   Дана  процедура  рекурсивна,  тому  що  останній  рядок  –  “завантажити  N–1
            контейнер”  –  є  викликом  процедурою  самої  себе.  Слід  відмітити,  що  аргумент  при
            рекурсивному виклику простіший, ніж вихідний аргумент N, у тому розумінні, що (N–
            1)  –  це  число  менше,  ніж  число  N.  Тому  “завантаження  N  контейнерів”  є  більш
            складний  випадок,  що  виражається  через  менш  складний  випадок  виконання  тих  же
            самих дій, тобто через “завантажити N–1 контейнер”.
                   Класичним прикладом рекурсивного визначення в Пролозі може бути процедура
            “предок”, що складається з двох правил:
                   предок(А, Б):-батько(А,Б).
                   предок(А, Б):-батько(В, Б), предок(А, В)
                   Сукупність цих правил визначає два способи, відповідно до яких одна особа (А)
            може бути предком іншої особи (Б). Відповідно до першого правила, А є предком Б,
            якщо А – батько Б, тобто А є найближчим предком Б (рис. 3.1,а).
                   Відповідно до другого правила А буде предком Б, якщо є дехто В, що, будучи
            батьком Б, має своїм предком А. Іншими словами, А – предок Б, якщо А – предок батька
            Б, тобто А – віддаленим предком Б (рис. 3.1,б). У такий спосіб друге правило залежить
            від більш простої версії самого себе, тобто від підмети “предок”.

                                А                 А                          Іван
                                                                    Батько          Батько
                        Батько            Батько

                                Б                 ...                 Петро        Павло
                                   Предок
                                                                    Батько

                                          Батько                             Олег
                                                                    Батько
                                                  В
                                                      Предок
                                          Батько                      Борис


                                                  Б
                                                      Предок
                                 а)               б)                           в)
             Рисунок 3.1 – Приклади відношення “предок” і його зв'язок з відношенням “батько”: а)
                 А найближчий предок Б; б) А віддалений предок Б; в) приклад схеми програми.






                                                         28
   23   24   25   26   27   28   29   30   31   32   33