ВУЗ:
Составители:
Рубрика:
void va_start(va_list param, последний явный параметр функции);
тип va_arg( va_list param, тип);
void va_end(va_list param);
здесь va_list – специальный тип данных, описанный в файле stdarg.h; тип – тип очередного параметра
из списка переменной длины, к которому осуществляется доступ.
Макрос va_start используется для настройки указателя типа va_list на первый элемент списка па-
раметров переменной длины. Вторым параметром в нем указывается последний из явно заданных пара-
метров функции. Применяя операцию разыменования, можно получить доступ к элементам списка пе-
ременной длины. Для этого необходимо знать тип текущего элемента в списке. Применяя макрос
va_arg, получаем значение текущего элемента списка переменной длины и переадресовываем указатель
на следующий элемент списка. Макрос va_end служит для корректного завершения работы функции со
списком параметров переменной длины. Он вызывается перед возвращением из функции после того,
как будет обработан весь список параметров переменной длины. Описатели типов аргументов списка
переменной длины лучше передавать в функцию в виде строки символов.
П р и м е р 41
double sum(char *format, ...)
{
va_list p;
double s = 0;
va_start(p, format);
for (; *format; format++)
switch (*format)
{
case 'i': s += va_arg(p, int); break;
case 'd': s += va_arg(p, double);
}
va_end(p);
return s;
}
13.5 Рекурсивные функции
Рекурсивным считается объект, в определении которого содержится ссылка на самого себя. Таким
образом, функция, содержащая вызов самой себя, будет считаться рекурсивной. Различают прямую и
косвенную рекурсию. Если функция содержит явную ссылку на саму себя, то она называется явно ре-
курсивной. Если функция ссылается на функцию, которая вызывает исходную, то такая рекурсия назы-
вается косвенной. Рекурсивная функция подобна явному циклическому итерационному процессу и все-
гда может быть заменена им. Она появляется тогда, когда некоторый объект может быть определен че-
рез другой объект той же сущности, но с другим содержанием: P = P1(S, P). Важным требованием, от-
носящимся к использованию рекурсии, является конечность объектов, порожденных рекурсивным оп-
ределением. Классическим примером рекурсивного процесса является вычисление факториала: n! =
n*(n – 1)*(n – 2)*...*1.
Рекурсивные алгоритмы обычно более просты и наглядны, чем циклические. Методика анализа лю-
бой задачи на предмет составления рекурсивного алгоритма ее решения состоит из следующих этапов:
1) параметризация задачи, т.е. выявление различных элементов, от которых зависит ее решение, с
целью нахождения управляющего параметра; при этом размерность управляющего параметра должна
убывать после каждого рекурсивного вызова;
Страницы
- « первая
- ‹ предыдущая
- …
- 43
- 44
- 45
- 46
- 47
- …
- следующая ›
- последняя »
