Зустрічаючи такий термін як рекурсія, далеко не всі знають, що це таке і для чого потрібно. Що це собою представляє, давайте розглянемо у деталях. Отже, рекурсія являється процесом, коли функція викликає саму себе у такому ж власному виконанні. Це важливий концепт у більшості мовах програмування. Здатна виступати в якості потужного інструменту для того, щоб вирішувати складні питання.
У процесі коли функція може викликати саму себе, також утворюється ніби стек викликів. І кожен новий виклик додається до вершини даного стека. Кожен з викликів відрізняється власними локальними змінами та параметрами, які можуть зберігатися в окремому стековому фреймі. Все це продовжується, доки не досягається базова умова або вихід з функції.
Яким чином запобігти безкінечній рекурсії?
Одним з головних умов елементів рекурсії являється наявність умови виходу. Така умова означає, що коли рекурсивні виклики мають припинитися, тоді з боку функції повертається результат. Саме це запобігає безкінечному виконанню функції, забезпечується кінцівка процесу рекурсії.
Для чого використовується рекурсія? Це може бути використано для того, щоб вирішувати задачі, які також можуть бути логічне розкладені на менші аналогічні підзадачі. Тобто, проблеми вирішуються шляхом розбиття на більш прості підзадачі, щоб поєднати результати.
Рекурсія без умов виходу - які наслідки?
Приведемо кілька наслідків від наявності рекурсії, що не має умови виходу. Завдяки прикладам, можна надати опис проблеми у загальному плані. Варто ще зазначити, що наслідки будуть залежати від пристрою чи програми.
- Можливість невірного використання пам'яті. Тобто кожна функція чи процес потребує додаткового обсягу пам'яті. Якщо рекурсивні виклики не матимуть виходу, тоді це змушує пам’ять вичерпуватися. Від чого програма або система отримує збій;
- Програма може зациклитися. Через безкінечну рекурсію може статися така проблема, як зациклення програми. Коли програма буде постійно себе викликати, не маючи можливості виконувати інші операції. У результаті програма попросту «зависає», коректне не працює;
- Можливе витік ресурсів через безкінечну рекурсію. Це може стосуватися процесорного часу, мережевого підключення, інших системних ресурсів. Якщо не контролювати подібні виклики, відсутні механізми зупинки, тоді це призводить до марного використання системних ресурсів;
- Може статися втрата даних. Тобто, через безкінечну рекурсію, виникає можливість втрати даних чи неправильної обробки. Тобто, якщо рекурсивні виклики не піддаються контролю, не обробляються правильним чином, тоді можливі помилки, результати, що не коректні. І це призводить до того, що програма починає працювати неправильно.
Наостанок розглянемо певні приклади рекурсії, щоб стало більш зрозуміло.
Приклад рекурсії з використанням дзеркала
Щоб навести приклад, можна взяти невелике дзеркало, тримати перед іншим дзеркалом або тією поверхнею, що відображає відображення, того хто тримає. Після чого важливо поглянути у дзеркало таким чином, щоб можна було побачити власне відображення разом із відображенням дзеркала. Виходять множинні відображення. Подібний процес можна продовжувати довго, спробувавши побачити безліч рівнів відображень за допомогою дзеркала. У результаті кожен новий рівень відображення відображає вас та всі попередні відображення за принципом рекурсії. Завдяки чому створюється візуальний ефект рекурсії, де можна побачити безкінечну послідовність відображень.
Тому знаючи, що таке рекурсія, вийде більш ефективне розібратися, як запобігти негативним наслідкам, які виникають через цей процес.