- •14. Разветвляющиеся программы.
- •14.1. Условный оператор if.
- •If Условие then Оператор1 else Оператор2;
- •If Условие then Оператор;
- •If Условие then if ПодУсловие then ... Else ...
- •14.2. Случайные величины.
- •14.3. Логические операции и выражения.
- •Логические операции и таблицы истинности
- •15. Циклические программы.
- •15.1. Оператор перехода Go To.
- •15.2. Операторы цикла Do.
- •1. Бесконечный цикл
- •2. Со счетчиком
- •3. C предусловием
- •15.3. Оператор цикла For.
- •16. Массивы данных.
- •16.1. Использование массивов при программировании.
- •16.2. Рекурсия.
- •16.3. Сортировка.
- •17. Элементы управления.
- •17.5. Списки (ListBox, ComboBox, CheckedListBox).
- •18. Объектное программирование.
- •18.1. Статические и динамические компоненты объектов.
- •18.2. Поля и свойства объектов.
- •18.3. Конструкторы.
- •Конструктор по умолчанию
- •Конструктор копирования
- •Конструктор преобразования
- •18.4. Наследование.
- •Простое наследование
- •Множественное наследование
- •18.5. Полиморфизм.
- •10. Организация поточных процессов.
- •10.1. Особенности поточной формы организации процессов.
- •10.2. Основные параметры поточных линий.
- •10.3. Виды поточных линий.
- •5. По характеру движения конвейера.
- •6. По уровню механизации процессов различают автоматические и полуавтоматические поточные линии.
- •7. По степени охвата производства.
- •9.1. Структура и длительность цикла процесса
- •9.5. Длительность производственного цикла сложного процесса
- •7. Основы организации процессов.
- •7.1. Принципы организации процессов.
- •7.2. Типы операционных систем.
16.2. Рекурсия.
Реку́рсия — процесс повторения элементов самоподобным образом.
В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция вызывает функцию, а функция — функцию. Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.
Преимущество рекурсивного определения объекта заключается в том, что такое конечное определение теоретически способно описывать бесконечно большое число объектов. С помощью рекурсивной программы же возможно описать бесконечное вычисление, причём без явных повторений частей программы.
Реализация рекурсивных вызовов функций в практически применяемых языках и средах программирования, как правило, опирается на механизм стека вызовов — адрес возврата и локальные переменные функции записываются в стек, благодаря чему каждый следующий рекурсивный вызов этой функции пользуется своим набором локальных переменных и за счёт этого работает корректно. Оборотной стороной этого довольно простого по структуре механизма является то, что на каждый рекурсивный вызов требуется некоторое количество оперативной памяти компьютера, и при чрезмерно большой глубине рекурсии может наступить переполнение стека вызовов. Вследствие этого, обычно рекомендуется избегать рекурсивных программ, которые приводят (или в некоторых условиях могут приводить) к слишком большой глубине рекурсии.
Имеется специальный тип рекурсии, называемый «хвостовой рекурсией». Интерпретаторы и компиляторы функциональных языков программирования, поддерживающие оптимизацию кода (исходного или исполняемого), автоматически преобразуют хвостовую рекурсию к итерации, благодаря чему обеспечивается выполнение алгоритмов с хвостовой рекурсией в ограниченном объёме памяти. Такие рекурсивные вычисления, даже если они формально бесконечны (например, когда с помощью рекурсии организуется работа командного интерпретатора, принимающего команды пользователя), никогда не приводят к исчерпанию памяти. Однако, далеко не всегда стандарты языков программирования чётко определяют, каким именно условиям должна удовлетворять рекурсивная функция, чтобы транслятор гарантированно преобразовал её в итерацию. Одно из редких исключений — язык Scheme (диалект языка Lisp), описание которого содержит все необходимые сведения.
Любую рекурсивную функцию можно заменить циклом и стеком.
16.3. Сортировка.
Алгоритм сортировки — это алгоритм для упорядочения элементов в списке. В случае, когда элемент списка имеет несколько полей, поле, служащее критерием порядка, называется ключом сортировки. На практике в качестве ключа часто выступает число, а в остальных полях хранятся какие-либо данные, никак не влияющие на работу алгоритма.
Алгоритмы сортировки оцениваются по скорости выполнения и эффективности использования памяти:
Время — основной параметр, характеризующий быстродействие алгоритма. Называется также вычислительной сложностью. Для упорядочения важны худшее, среднее и лучшее поведение алгоритма в терминах мощности входного множества A.
Память — ряд алгоритмов требует выделения дополнительной памяти под временное хранение данных.