ВУЗ:
Составители:
Рубрика:
2) поиск тривиального случая и его решения. На этом этапе должно быть найдено решение задачи не содержащее ре-
курсивного определения;
3) декомпозиция общего случая, требующая привести его к одной или нескольким более простым задачам меньшей
размерности.
В случае с факториалом управляющим параметром является текущее значение числа n. Тривиальный случай представ-
ляет собой 0! = 1, а декомпозиция общего случая выглядит n! = n*(n – 1)!.
Обычно функции имеют локальные объекты, определенные в функции и недоступные за ее пределами. При каждом ре-
курсивном вызове функции порождается новое множество локальных переменных. Они имеют те же имена, что и перемен-
ные функции "предыдущего поколения", однако имеют собственные значения. Все конфликты по именам между перемен-
ными разрешены следующим правилом: идентификаторы всегда относятся к самому последнему порожденному множеству
переменных. Поэтому нужно убедится, что максимальная глубина рекурсии достаточно мала, так как при каждом новом ре-
курсивном вызове функции значения всех ее локальных переменных и "состояние вычислений" сохраняется в стеке про-
граммы. При достаточно большой вложенности рекурсии стек может быть быстро исчерпан, а программа будет аварийно за-
вершена.
Таким образом, рекурсивные алгоритмы подходят там, где рекурсивно определяются обрабатываемые данные, а там,
где есть очевидное итерационное решение, рекурсии следует избегать.
13.6 Параметры функции main
С точки зрения стандарта языка С функция main является обычной функцией, которой можно передать параметры. Од-
нако то, что эта функция запускается из операционной системы накладывает определенный отпечаток на список ее фор-
мальных параметров, он не может быть произвольным. Прототип функции main выглядит следующим образом:
int main(int argc, char *argv[], char *envp[])
здесь argv – массив указателей на строки; argc – число элементов в массиве argv; envp – массив указателей на символьные
строки, содержащие описание переменных окружения.
Данный список формальных параметров обеспечивает связь функции main с командной строкой, из которой можно пе-
редавать данные программе. Если функция main не обрабатывает параметры из командной строки, то их описание опускает-
ся.
Параметры в командной строке разделяются пробелами. Каждый такой параметр заносится в строку, соответствующую
argv[i]
(0 < i < argc). Элементу argv[0] соответствует название программы, обязательно указываемое в командной строке.
14 ДИРЕКТИВЫ ПРЕПРОЦЕССОРА В ЯЗЫКЕ С
Обычно, вместе с компилятором языка С в пакет программ, обеспечивающих программирование на языке С, входит
еще одна программа – препроцессор. Ее главным назначением является предшествующая компиляции обработка исходного
текста разрабатываемой программы с целью внесения в него определенных изменений. В состав действий, выполняемых
препроцессором, входит выполнение особых команд в тексте программы – директив препроцессора. Каждая директива пре-
процессора должна занимать одну строку в тексте программы и начинаться с символа '#', что позволяет отличать их от опе-
раторов программы. Сами директивы препроцессора приведены ниже.
1 Включение текстов из файлов.
#inclule <имя_файла>
или
#inclule "имя_файла"
После обработки текста программы препроцессором на месте этой директивы будет расположен текст указанного файла. Ес-
ли имя файла выделено угловыми скобками (< >), то препроцессор будет искать файл в системных директориях. Если же
имя файла выделено кавычками, то файл должен находиться в одной директории с обрабатываемым препроцессором фай-
лом.
2 Выполнение замен в тексте программы:
#define идентификатор строка_замещения
После включения данной директивы в текст программы, препроцессор произведет замену всех встретившихся идентифика-
торов, включенных в состав директивы #define на текст строки замещения. Чтобы прекратить эти действия, в тексте про-
граммы нужно поместить директиву
#undef идентификатор
Страницы
- « первая
- ‹ предыдущая
- …
- 34
- 35
- 36
- 37
- 38
- …
- следующая ›
- последняя »