Матвієнко Ю.С. Програмування та математичне моделювання.
62
Зазвичай усяке визначення, яке вводить нове поняття, пояснює його за
допомогою інших понять, які вже відомі. Але в математиці і в програмуванні
зустрічаються визначення, які не вкладаються в цю схему. Наприклад в
формулах
( )
>⋅
=
=
>−⋅
=
−
0,
,0,1
;0,!1
,0,1
!
1
nякщоxx
nякщо
x
nякщоnn
nякщо
n
n
n
обчислення факторіалу та степеня числа з цілим невід’ємним показником для
знаходження кожного наступного значення потребує знати попереднє. Це
рекурсивне визначення.
Рекурсивне визначення – часто використовуваний в математиці спосіб
задання функції, при якому значення шуканої функції в даній точці
визначається через її значення в попередній точці.
Потужність рекурсивного визначення полягає в тому, що воно дозволяє
за допомогою кінцевого висловлення визначити нескінченну множину
об’єктів. Аналогічно за допомогою кінцевої рекурсивної програми можна
описати нескінченні обчислення, причому програма не буде містити явних
повторень.
Ми вже знаємо, що існує можливість вийти з основної програми,
звернутися до підпрограми і, закінчивши її, повернутися в основну програму
до оператора, наступного після звернення до підпрограми. А чи може
підпрограма звернутися сама до себе? В паскалі це дозволено.
Підпрограма, що звертається сама до себе як до підпрограми
(безпосередньо або через ланцюг підпрограм), називається рекурсією.
Для виразу рекурсивних програм необхідно й достатньо мати поняття
процедури або підпрограми, оскільки вони дозволяють дати будь-якому
оператору ім’я, за допомогою якого до нього можна звертатися. Саме слово
«рекурсія» означає «повернення».
Рекурсія – спосіб визначення функцій, які є об’єктом вивчення в теорії
алгоритмів та інших розділах математики. Цей спосіб давно
використовується в арифметиці для визначення числових послідовностей
(прогресій, чисел Фібоначчі). Суттєву роль грає рекурсія і в обчислювальній
математиці (рекурентні методи).
Роботу рекурсивної функції розглянемо на прикладі обчислення 5!.
Визначення вказує на те, що 5!=4!*5. Таким чином, щоб обчислити 5! Ми
повинні спочатку обчислити 4!. Використаємо означення ще раз. 4!=3!*4,
тобто треба шукати 3!. Продовжуючи цей процес ми кожен раз звертаємося
до факторіалу попереднього числа. Аж поки не дійдемо до 0!=1.
Рекурсивний виклик процедури мало чим відрізняється від виклику
іншої процедури. Все проходить так, нібито звернення відбулося до іншого
екземпляру тієї ж процедури. Виконується той самий код, але с іншим