Рекурсивні процедури (Visual Basic), Microsoft Docs

Як правило, це не найефективніший спосіб написання коду Visual Basic.

Нижче наведена процедура використовує рекурсію для обчислення факторіалу вихідного аргументу:

Розгляд рекурсивних процедур

Обмежувальні умови. Необхідно розробити рекурсивну процедуру для перевірки принаймні однієї умови, яка може перервати рекурсію, а також необхідно розглянути випадки, коли така умова не виконується протягом розумної кількості рекурсивних викликів. Без, принаймні, однієї умови, яка може бути виконана без помилок, виникає великий ризик виконання у нескінченному циклі.

Використання пам'яті.Додаток має обмежений обсяг простору для локальних змінних.Кожен раз, коли процедура викликає саму себе, вона використовує більше цього простору для додаткових копій її локальних змінних.Якщо цей процес триватиме невизначено довго, він в кінцевому підсумку рахунку викликає помилку StackOverflowException.

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

Взаємна рекурсія.Можна спостерігати дуже низьку продуктивність або навіть нескінченний цикл, якщо дві процедури викликають одна одну.

Виклик зі дужками.Коли процедура Function рекурсивно викликає саму себе, після імені процедури слід ставити дужки, навіть якщо відсутнясписок аргументів. В іншому випадку ім'я функції сприймається як її значення, що повертається.

Тестування.Якщо Ви пишете рекурсивну процедуру, необхідно перевірити її дуже уважно, щоб переконатися в тому, що вона завжди задовольняє деяку граничну умову.Слід також переконатися в тому, що в результаті занадто великої кількості рекурсивних викликів ви не витратите всю доступну пам'ять.