ЗНАЕТЕ ИНТУИТ, Лекция, Процедури и функции

Рекурсивни процедури

VBA позволява създаването на рекурсивни процедури, т.е. процедури при оценяване на тези, които се извикват. Повикванията към рекурсивна процедура могат да отидат директно в тялото му или да се самоизвикват чрез други процедури. В последния случай модулът има няколко свързани рекурсивни процедури. Стандартен пример за рекурсивна процедура е функция - факториален факт (N) = N !. Ето дефиницията му във VBA:

Тъй като всяко извикване на процедура изисква режийни разходи, една итеративна програма е по-ефективна за факториал:

Ето процедура, която изчислява времето за изпълнение на рекурсивните и нерекурсивните варианти:

Ето резултатите от изчисленията за две повторения на тестовата процедура:

Както можете да видите, в този случай нерекурсивната опция работи почти три пъти по-бързо. В допълнение към проблемите по време на изпълнение, рекурсивните процедури могат лесно да изчерпят паметта на стека, която съдържа аргументите на всяко рекурсивно повикване. Следователно избягвайте неконтролирано умножение на рекурсивни повиквания и заменете рекурсивните алгоритми с итеративни алгоритми, където използването на рекурсия е по същество ненужно.

Ползите от рекурсивните процедури могат да бъдат по-изразени при обработка на данни, които имат рекурсивна структура (да речем, йерархични или мрежови). Основните структури от данни (обекти) на Office 97 всъщност не са рекурсивни: един работен лист на Excel не може да бъде стойност на клетка в друг, една таблица на Access не може да бъде член на друга и т.н. Данните, съхранявани в работни листове на Excel или в база данни на Access, сами могат да дефинират „рекурсивни“ взаимоотношения и за тяхната успешна обработка трябва да се използват рекурсивни процедури. Сега ще разгледаме клас за работа с бинарни дървета за търсене. Дърветата представляват рекурсивна структура от данни, следователно операциите върху тях естествено се определят от рекурсивни алгоритми.