Шаг 30 - Рекурсия в VBA
При программировании многие задачи решаются на основе рекурсии. Т.е. есть ряд задач, которые вообще без рекурсии не решаются. Это задачи имитации человеческого интелекта на основе перебора вариантов. Без рекурсии есть возможность решить подобные задачи только для частных случаев. Понятие рекурсии довольно молодое. Вот справка:
1958 год. В руководстве по программированию ЕРМЕНТ появилось понятие рекурсивности. Рутисхаузер.
Рекурсивная процедура - это процедура вызывающая сама себя. Классический пример подсчет факториала. Мы то его и реализуем:
Sub Test() MsgBox Str(Fact(3)) End Sub Function Fact(n As Integer) If n < 1 Then Fact = 1 Else Fact = Fact(n - 1) * n End If End Function
Всё это хорошо, только для рекурсивных функций используется стековая память, которая имеет предел :-(. В этой памяти размещаются и аргументы. Если их много или они большие по памяти хранения - финиш настанет еще быстрее. С рекурсивными функциями связанно еще и время выполнения. То же в плохую сторону.
В Excel нет рекурсивных обьектов. Листы, книги, ячейки не рекурсивные. Но вот данные :-) им всё ни почем. Вы можете создавать используя Type структуры и создавать деревья. Для обработки их удобно использовать рекурсию.
Что происходит при вызове рекурсивных процедур можно увидеть выполняя программу по шагам (F8) и просматривая окно локальных переменных или сразу стек вызовов из меню Вид.
Я тут ставил эксперимент и оказалось, что факториал числа больше 100 можно расчитать, но вот 200 уже нельзя. Переполнение говорит. Вот так.
Предыдущий Шаг | Следующий Шаг
Автор Каев Артем.