double arrow

Шаг 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 уже нельзя. Переполнение говорит. Вот так.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: