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

Например, числа Фибоначчи задаются никак иначе чем через рекуррентную формулу .

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

Dim i, n, f1, f2, fn As Integer

f1 = 1

f2 = 1

Input n

fn = 1

If n > 2 Then

Else

For i = 3 To n

fn = f1 + f2

f1 = f2

f2 = fn

Next i

End If

Print “число Фибоначчи равно”,fn

В первых двух операторах присваиваются начальные значения для первых двух чисел Фибоначчи. Затем вводится номер числа Фибоначчи, которое надо вычислить. Поскольку первые два числа Фибоначчи известны и равны 1, то за оператором ввода стоит оператор присваивания числу Фибоначчи единицы. Затем проверяется введённое значение и если оно больше 2, то в цикле по рекуррентному выражению вычисляется новое значение числа Фибоначчи. Начальное значение счётчика в операторе цикла равно 3, так как третье число Фибоначчи равно сумме первого и второго, и следовательно при n=3 цикл должен выполниться только один раз.

Функции пользователя

Часть программы можно оформить в виде функции. Описание функции выглядит так:

Function ИмяФункции (СписокПараметров) As ТипДанныхФункции

Описание переменных

Блок операторов

End Function

Блок операторов должен обязательно содержать хотя бы один оператор присваивания ИмяФункции=

Вычисление функции заканчивается последним оператором, но если надо закончить вычисление раньше, то надо воспользоваться оператором Exit Function.

Например, вычисление дискриминанта квадратного уравнения мы можем оформить в виде функции.

Function Дискриминант(a, b, c As Single) As Single

Dim x As Single

X=4*a*c

Дискриминант=b^2-x

End Function

Тогда в программе вычисления корней квадратного уравнения можно было бы использовать следующий оператор: D=Дискриминант(a, b, c)

Если с помощью VBA описать таким образом какую-либо функцию в Excel, то ей можно будет пользоваться так же, как и любыми встроенными функциями. Эта функция будет находится в категории «Определенные пользователем».

Встроенные в Excel функции можно использовать при программировании если учесть, что все они являются методами объекта Application. Поэтому, чтобы в программе использовать, например, встроенную функцию Ln(), надо вызвать её так: Application.Ln().

Чтобы в Excel запрограммировать функцию пользователя надо вызвать редактор VBA.

Это делается через меню Сервис\Макрос\Редактор VisualBasic.

Сначала меню Вид\Окно проекта.

В левой части появившегося окна надо выделить строчку VBAProject(Книга1), а затем меню Вставка\Модуль.

В правой части появится окно Книга1-Модуль1(Программа), в котором и надо написать определение функции.

Не закрывая окна надо щелкнуть в панели инструментов по кнопке «Object Browser»(Просмотр объектов), найти в нём имя функции, щелкнуть по нему правой кнопкой и выбрать пункт Properties(Свойства). В появившемся окне надо коротко написать, что делает эта функция. Это описание будет появляться, когда пользователь выберет эту функцию в Excel.

Рассмотрим создание функции пользователя для вычисления суммы .

Function SpecialSum(m As Integer) As Single

Dim S As Single

Dim n As Integer

S=0

For n=1 To m

S=S+n/(n^2+1)

Next n

SpesialSum=S

End Function

Контрольные вопросы

1. Что такое рекуррентная формула?

2. Как записать в виде рекуррентной формулы алгоритм вычисления чисел Фибоначчи?

3. Какие операторы VBA позволяют реализовать вычисления по рекуррентным формулам?

4. Как задаётся описание функции при программировании на VBA?

5. Как с помощью VBA создать в Excel функцию пользователя?