Создание рекурсивных процедур

В процедурах ограниченно количество места для переменных. Чем больше раз вызывается процедура, тем больше места используется. Процедура, вызывающая себя, называется рекурсивной. Неограниченная рекурсия может вызывать ошибку. Например:

Function RunOut(Maximum) 
 RunOut = RunOut(Maximum) 
End Function

Эта ошибка может быть менее явной, если процедуры вызывают друг друга бесконечное число раз или если не выполняется условие, ограничивающее рекурсию. У рекурсии есть свое назначение. Например, следующая процедура использует рекурсивную функцию для вычисления факториалов.

Function Factorial (N) 
 If N <= 1 Then ' Reached end of recursive calls. 
 Factorial = 1 ' (N = 0) so climb back out of calls. 
 Else ' Call Factorial again if N > 0. 
 Factorial = Factorial(N - 1) * N 
 End If 
End Function

Нужно проверить, не использована ли рекурсия столько раз, что это повлечет за собой загрузку всей памяти. Если возникла ошибка, проверьте, не идет ли вызов рекурсии бесконечное количество раз. После этого попробуйте сохранить память, выполнив следующее:

  • Устраните ненужные переменные.
  • Используйте типы данных, отличные от Variant.
  • Измените структуру процедуры. Часто можно подставить вложенные циклы.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.