Індивідуальні завдання (по варіантам)
Лабораторна робота №4 Тема: Рекурсія, відсікання (отсечение). Методичні вказівки Спосіб розв’язання задачі полягає в тому, щоб розбити вихідну задачу на більш дрібні підзадачі, розв’язати їх, а потім об'єднати підзадачі для того, щоб одержати розв’язок вихідної задачі. Якщо підзадача є зменшеним варіантом вихідної задачі, то спосіб її розбивки і розв’язання ідентичні способу, застосованому до вихідної задачі. Такий процес називається рекурсією. Розв’язок задачі складається з фази розбивки і фази розв’язання. І фаза: задача розбивається доти, поки остання підзадача не стане досить примітивною з відомим розв’язком. Загальна рекурсія (нисхідна стратегія) ІІ фаза: виконується розв’язання більш складної задачі на основі наочності розв’язання простої підзадачі. Хвостова рекурсія (висхідна стратегія).
Два додаткових параметри Мета роботи. Знаходження суми числового ряду методом рекурсії. 1. Створити проект для обчислення факторіалу числа. Кроки виконання: - замінити інформацію, що міститься в файлі main.cl на наступну Бачимо, що додана один рядок factorial: (integer N, integer F) procedure (i,o)., який визначає бінарний предикат factorial з відомим першим на невідомим другим аргументами. Ключове слово procedure описує поведінку предиката, вказуючи, що його розв’язок буде успішним та буде знайдено один єдиний розв’язок, так, що відкати не знадобляться. В main.pro знаходиться власне визначення нового предикату. Для кожного його виклику є два можливі відповідності - з нульовим або довільним перший аргументом. Visual Prolog перебирає формули в порядку їх появи в коді, так що якщо перший аргумент дорівнює нулю, перевірка починається з першої формули factorial(0,F). Перше правило формули - !, Так зване відсікання, використання якого запобігає відкат до другої формули і таким чином забезпечує наявність рівно одного рішення предиката. Після цього змінна F, що містить рішення предиката, встановлюється в 1 і виводиться на друк. Друга формула factorial(N,F) рекурсивно обчислює F1 як факторіал N-1, встановлює рішення предиката рівним N * F1 і виводить його на друк. Нарешті, stdio::nl друкує новий рядок.
При виконанні основної програми предикат factorial виконується рівно один раз для N=12. З кожним викликом рекурсії N зменшується на одиницю, пока не буде дорівнювати 0. Після цього значення факторіалів повертаються в виводяться на друк в порядку зростання. Програма буде виконувати запит тільки до 12!, так як спроба обчисли 13! викличе помилку переповнення цілочисленного типу. 2. Скласти і налагодити програму обчислення суми числового ряду методом загальної і хвостової рекурсії: Sum = 1+2+3+4+...+n -сума числового ряду.
Індивідуальні завдання (по варіантам)
Читайте также: Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|