На этом шаге мы рассмотрим создание и использование таких подпрограмм.
В VBA возможно создание рекурсивных подпрограмм, т.е. подпрограмм, вызывающих самих себя. Стандартным примером рекурсивной подпрограмм является функция вычисления факториала, т.е. функция, возвращающая результат произведения первых n натуральных чисел, где n — аргумент функции. Для этой функции имеется стандартное обозначение: Fact(n) =n!, где Fact (0) =1. Ясно, что Fact(n) = n Fact (n - 1).
Основываясь на данном соотношении, приводимая ниже рекурсивная функция вычисляет значение факториала.
Function Fact(n As Integer) As Integer If n<l Then Fact = 1 Else Fact = Fact(n - 1) * n End If End Function
Другим стандартным примером применения рекурсивных функций является нахождение наибольшего общего делителя двух целых чисел по алгоритму Евклида. Наибольший общий делитель (НОД) двух целых чисел — это наибольшее целое, на которое делятся оба числа. Например, HOД(10, 14) = 2 и НОД (15, 31) = 1.
Алгоритм Евклида состоит в следующем:
Приводимая ниже рекурсивная функция программирует алгоритм Евклида.
Function НОД (Целое1 As Long, Целое2 As Long) As Long If Целое2 Mod Целое1 = 0 Then НОД = Целое1 Else НОД = НОД(Целое2, Целое1 Mod Целое2) End If End Function
Несмотря на элегантность рекурсивных подпрограмм, применять их надо с осторожностью, т. к. неаккуратное использование может привести к проблемам с памятью — многократный вызов такой подпрограммы быстро исчерпывает стековую память.
На следующем шаге мы рассмотрим область определения переменной.