рекурсивні функції
Якщо в тілі функції зустрічається виклик самій цій функції, то ми маємо справу з так званої рекурсією. У мові програмування Pascal рекурсивних можуть володіти як функції, так і процедури.
У наведеному прикладі процедура rever виводить цифри, переданого їй у якості фактичного параметра числа, в зворотному порядку. Тобто якщо ми передаємо число 35, то процедура виведе на екран число 53. Розглянемо, як вона це робить:
- Ми передаємо число 3096.
- Процедура rever виводить на екран залишок від ділення на 10. Це число 6.
- Перехід на новий рядок не відбувається, тому що використовується write.
- Перевіряється умова того, що 3096 при розподіл без остачі на 10 більше нуля.
- Викликається rever з фактичним параметром, рівним 309.
- Друга запущена процедура виводить на екран цифру 9 і запускає третю процедуру з параметром 30.
- Третя процедура виводить 0 і викликає четвертий rever з 3 в якості параметра.
- Четверта процедура виводить 3 на екран і нічого більше не викликає, тому що умова (3 div 10) <> 0 помилково.
- Четверта процедура завершується і передає управління третьої.
- Третя процедура завершується і передає управління другий.
- Друга процедура завершується і передає управління першою.
- Перша процедура завершується і передає управління в основну гілку програми.
У підсумку, процедура rever була викликана чотири рази, хоча з основної програми до неї було єдине звернення.
Наявність умови в тілі рекурсивної функції (або процедури), при якому вона більше себе не викликатиме, дуже важливо. В іншому випадку, як і в ситуації з циклами, може статися так зване зациклення.