Шаг 139.
VBA в MSExcel.
Основы программирования на VBA. Рекурсивные подпрограммы

    На этом шаге мы рассмотрим создание и использование таких подпрограмм.

    В 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.

    Алгоритм Евклида состоит в следующем:

  1. Если а делится на b, то НОД(а, b) = b.
  2. В противном случае — НОД(а, b) = НОД(b, a Mod b).

    Приводимая ниже рекурсивная функция программирует алгоритм Евклида.

  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

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

    На следующем шаге мы рассмотрим область определения переменной.




Предыдущий шаг Содержание Следующий шаг