Рекурсивные алгоритмы. Сущность рекурсии
Процедура или функция может содержать вызов других процедур или функций. В том числе процедура может вызвать саму себя. Никакого парадокса здесь нет – компьютер лишь последовательно выполняет встретившиеся ему в программе команды и, если встречается вызов процедуры, просто начинает выполнять эту процедуру. Без разницы, какая процедура дала команду это делать.
Пример рекурсивной процедуры:
1 2 3 4 5 6 | procedure Rec(a: integer); begin if a>0 then Rec(a-1); writeln(a); end; |
Рассмотрим, что произойдет, если в основной программе поставить вызов, например, вида Rec(3). Ниже представлена блок-схема, показывающая последовательность выполнения операторов.
Рис. 1. Блок схема работы рекурсивной процедуры.
Процедура Rec вызывается с параметром a = 3. В ней содержится вызов процедуры Rec с параметром a = 2. Предыдущий вызов еще не завершился, поэтому можете представить себе, что создается еще одна процедура и до окончания ее работы первая свою работу не заканчивает. Процесс вызова заканчивается, когда параметр a = 0. В этот момент одновременно выполняются 4 экземпляра процедуры. Количество одновременно выполняемых процедур называют глубиной рекурсии.
Четвертая вызванная процедура (Rec(0)) напечатает число 0 и закончит свою работу. После этого управление возвращается к процедуре, которая ее вызвала (Rec(1)) и печатается число 1. И так далее пока не завершатся все процедуры. Результатом исходного вызова будет печать четырех чисел: 0, 1, 2, 3.
Еще один визуальный образ происходящего представлен на рис. 2.
Рис. 2. Выполнение процедуры Rec с параметром 3 состоит из выполнения процедуры Rec с параметром 2 и печати числа 3. В свою очередь выполнение процедуры Rec с параметром 2 состоит из выполнения процедуры Rec с параметром 1 и печати числа 2. И т. д.
В качестве самостоятельного упражнения подумайте, что получится при вызове Rec(4). Также подумайте, что получится при вызове описанной ниже процедуры Rec2(4), где операторы поменялись местами.
1 2 3 4 5 6 | procedure Rec2(a: integer); begin writeln(a); if a>0 then Rec2(a-1); end; |
Обратите внимание, что в приведенных примерах рекурсивный вызов стоит внутри условного оператора. Это необходимое условие для того, чтобы рекурсия когда-нибудь закончилась. Также обратите внимание, что сама себя процедура вызывает с другим параметром, не таким, с каким была вызвана она сама. Если в процедуре не используются глобальные переменные , то это также необходимо, чтобы рекурсия не продолжалась до бесконечности.
- Основные понятия информатики: информационные технологии, информатизация общества, информационные ресурсы. Информатика как наука и как прикладная дисциплина
- Федеральный закон Об информации, информационных технологиях и о защите информации от 8 июля 2006 года
- История развития компьютерной техники.
- Понятие информации, ее классификация, свойства информации, представление информации, единицы измерения информации.
- Формулы измерения информации Чартли и Шеннона, примеры вычислений.
- Системы счисления. Позиционные системы счисления, их представление.
- Двоичная, восьмеричная, шестнадцатеричная системы счисления.
- Правила преобразования чисел из одной системы счисления в другую.
- Примеры
- 2. Из двоичной и шестнадцатеричной систем счисления - в десятичную.
- 4. Из шестнадцатеричной системы счисления в двоичную:
- Правила перевода правильных дробей
- 1. Из десятичной системы счисления - в двоичную и шестнадцатеричную:
- 2. Из двоичной и шестнадцатеричной систем счисления - в десятичную.
- 3. Из двоичной системы счисления в шестнадцатеричную:
- 4. Из шестнадцатеричной системы счисления в двоичную:
- Понятие информационной системы. Структура ис.
- Процессы, обеспечивающие работу ис.
- Классификация информационных систем, свойства ис. Классификация по архитектуре
- Классификация по степени автоматизации
- Классификация по характеру обработки данных
- Классификация по сфере применения
- Классификация по охвату задач (масштабности)
- Типы информационных процедур.
- 1. Поиск.
- 2. Сбор и хранение.
- 3. Передача.
- 4. Обработка.
- 5. Использование.
- 6. Защита.
- Классификация ис по направлению деятельности
- Направления анализа функционирования корпоративной сети
- Экспертные системы их классификация
- Базовые функции экспертных систем
- Приобретение знаний
- Представление знаний
- Управление процессом поиска решения
- Разъяснение принятого решения
- Представление знаний. Классификация модеклей представления знаний.
- Понятие операционной системы. История развития ос.
- 1946 Г. – eniac (Electronic Numerical Integrator and Computer) – полное отсутствие какого-либо по, программирование путем коммутации устройств.
- 1952 Г. – Первая ос создана исследовательской лабораторией фирмы General Motors для ibm-701.
- 1955 Г. – ос для ibm-704. Конец 50-х годов: язык управления заданиями и пакетная обработка заданий.
- Основные принципы построения операционных систем.
- Классификация по компьютерной системы.
- Состав компонентов и функций ос
- Особенности алгоритмов управления ресурсами.(см. 27).
- Классификация ос Классификация ос
- Особенности алгоритмов управления ресурсами
- Особенности аппаратных платформ
- Особенности областей использования
- Особенности методов построения
- Сетевые ос. Варианты построения сетевых ос.
- Основные принципы построения системы информационной безопасности.
- Перечень и содержание огрганизационно-распорядительных документов иб.
- Основные механизмы доступа к информационным ресурсам.
- Способы и методы аутентификации.
- Средства защиты ис от потери информации.
- Брандмауэры и антивирусные пакеты.
- Базы и банки данных.
- Информационные сети. История развития информационных сетей.
- Классификация сетей
- Основные топологии лвс
- Понятие логической структуры сети. Элементы логической структуры.
- Основные понятия: интернет, провайдер, хост, сетевой протокол, ip-адрес, домен.
- Архитектура клиент-сервер, одноранговые сети и сети с выделенным сервером, их преимущества и недостатки.
- Понятие сервис ориентированной архитектуры.
- Алгоритм, свойства алгоритма, формы записи алгоритма, скорость выполнения алгоритма.
- Рекурсивные алгоритмы. Сущность рекурсии
- Алгоритмы сортировки.
- Понятие модели, численного метода. Подходы к реализации численных методов
- Этапы реализации решения численных задач. Методы решения численных задач.
- Алгоритмы решения задачи нахождения корней полинома: шаговый метод, метод половинного деления, метод Ньютона, метод простой итерации.
- Численные методы решения задач аппроксимации.
- Методы численного интегрирования.
- Методы одномерной оптимизации.