рекурсивні функції

Якщо в тілі функції зустрічається виклик самій цій функції, то ми маємо справу з так званої рекурсією. У мові програмування Pascal рекурсивних можуть володіти як функції, так і процедури.

У наведеному прикладі процедура rever виводить цифри, переданого їй у якості фактичного параметра числа, в зворотному порядку. Тобто якщо ми передаємо число 35, то процедура виведе на екран число 53. Розглянемо, як вона це робить:

  1. Ми передаємо число 3096.
  2. Процедура rever виводить на екран залишок від ділення на 10. Це число 6.
  3. Перехід на новий рядок не відбувається, тому що використовується write.
  4. Перевіряється умова того, що 3096 при розподіл без остачі на 10 більше нуля.
  5. Викликається rever з фактичним параметром, рівним 309.
  6. Друга запущена процедура виводить на екран цифру 9 і запускає третю процедуру з параметром 30.
  7. Третя процедура виводить 0 і викликає четвертий rever з 3 в якості параметра.
  8. Четверта процедура виводить 3 на екран і нічого більше не викликає, тому що умова (3 div 10) <> 0 помилково.
  9. Четверта процедура завершується і передає управління третьої.
  10. Третя процедура завершується і передає управління другий.
  11. Друга процедура завершується і передає управління першою.
  12. Перша процедура завершується і передає управління в основну гілку програми.

У підсумку, процедура rever була викликана чотири рази, хоча з основної програми до неї було єдине звернення.

Наявність умови в тілі рекурсивної функції (або процедури), при якому вона більше себе не викликатиме, дуже важливо. В іншому випадку, як і в ситуації з циклами, може статися так зване зациклення.

Схожі статті