- •4. Понятие объекта программы. Виды объектов: константа, переменная, функция. Задание (определение) объектов программы.
- •Константы
- •1. Понятие алгоритма. Свойства алгоритма.
- •9. Неодродные типы (структура). Характеристика основных составляющих неоднородных типов.
- •10. Понятие ссылочного типа (тип указатель). Характеристика основных составляющих типа указатель.
- •11. Понятие файла. Виды файлов: текстовые, двоичные. Способы обращения к элементам файлов. Операции над файлами.
- •14. Языковые средства вычислений над данными: выражение, оператор присваивания. Синтаксис и симантика выражения и опретора присваивания.
- •12. Совместимость типов. Преобразование типов.
- •Циклические управляющие структуры
- •18. Понятие структурного программирования.
- •19. Понятие подпрограммы и модульного программирования. Цели модульного программирования. Виды подпрограмм: функция, процедура.
- •Подпрограммы
- •20. Синтаксис и семантика функции языка с.
- •22. Понятие формального параметра. Использование формального параметра для передачи данных в подпрограмму (исходных данных и результатов).
- •23. Понятие фактического параметра подпрограммы. Правила связывания формального и фактического параметров.
- •25. Понятие рекурсии. Глубина рекурсии. Механизм реализации рекурсий в языках программирования.
- •24. Модульно - блочная структура программы и правила локализации объектов.
- •Местом или областью локализации может быть:
- •Способ связывания:
25. Понятие рекурсии. Глубина рекурсии. Механизм реализации рекурсий в языках программирования.
Под рекурсивным понимают способ описания понятий процессов функции через самих себя. Рекурсивное решение предполагает разбиение(разложение) на совокупность подзадач, таким образом, что любые 2 подзадачи либо не пересекались, либо одна из них является подзадачей другой. Среди этих подзадач должна быть хотя бы одна подзадача, которая определяет тривиальный случай –случай, когда задача решается непосредственно, - хотя бы одна подзадача определяет непосредственное решение, и должна быть хотя бы одна подзадача, которая определяет общий случай решения задачи. При этом общий случай решения задачи является способом сведения общей задачи к решению одной или нескольких простых (тривиальных) задач. Общий способ решения задач – это, как правило, способ, при котором происходит снижение размерности задачи. Процесс, сведения общей задачи к простой, называют разворачиванием рекурсий. После того, как рекурсия развернута, т.е. сведена к простой задаче, которая может быть решена непосредственно, выполняется процесс сворачивания рекурсии. На этом этапе происходит обобщение простого решения и переход, таким образом, к решению сложной задачи. Глубина рекурсии – количество шагов для сведения общей задачи к частной. Используя рекурсивное решение задачи идет оценка глубины рекурсии. Поэтому, прибегать к рекурсивному решению задачи необходимо, когда сама природа задачи является рекурсивной. Это проявляется если:
1. обрабатываемые данные имеют рекурсивную природу
2. нет для задачи итеративного способа решения – в этом случае применяют метод полного или частичного перебора возможных вариантов решения задачи.
Для реализации рекурсии в я.п. предлагается механизм, состоящий в возможности обращения подпрограммы к самой себе. Когда происходит очередной вызов подпрограммы, создаются новые экземпляры (поколения) формальных параметров и внутренних (локальных) переменных. При этом определено правило доступности экземпляров переменных – на некотором уровне рекурсии или же вызове подпрограмм доступны только те экземпляры переменных, которые соответствуют этому вызову. Для реализации правила доступности переменных используется стековая память – область памяти с определенным правилом обращения к элементам. Это правило состоит в следующем – в стеке доступен тот элемент, который был помещен в него последним. Непосредственная рекурсия – когда подпрограмма вызывает сама себя. Косвенная рекурсия – существует функция А, которая вызывает функцию В, которая, в свою очередь, вызывает функцию А. В стековой памяти хранятся не только значения подпрограмм, но и для каждого уровня рекурсии хранится текущее состояние подпрограмм. Для того, чтобы избежать при рекурсивном решении повторных вычислений одних и тех же величин необходимо передавать результаты промежуточных вычислений с одного уровня рекурсии на другой. Нет общего правила выполнения для каждой задачи, в каждой задаче это решается непосредственно для этой задачи, но с использованием дополнительных переменных. Реализация решения может проходить в одной из трех форм описания рекурсивного решения:
1. говорит о том, что реализация решения осуществляется на этапе рекурсивного разворачивания (спуска)
{S; if (условие)
Вызов подпрограммы}
2. задача решается на этапе сворачивания рекурсий
{ if (условие)
Вызов подпрограммы; s}
3. когда часть задачи решается на этапе разворачивания, а часть – на этапе сворачивания
{S1; if (условие) вызов подпрограммы; S2}
26. ДОСТОИНТСВА И НЕДОСТАТКИ РЕКУРСИВНОГО РЕШЕНИЯ ЗАДАЧИ ПО СРВНЕНИЮ С ИТЕРАТИВНЫМ.
Рекурсивное решение задачи является важным и мощным методом, который характеризует определенное свойство абстрактного мышления, при котором избавляемся от последовательного (итеративного) способа решения задачи, но выявляем различные уровни решения задачи – частные случаи. Рекурсивное описание решения задачи всегда короче и нагляднее итеративного, но реализация рекурсивного решения всегда занимает больше времени, чем итеративное. Кроме того, затрагивается дополнительная память для получения результата и их сохранения на различных уровнях решения задач. Поэтому, прибегать к рекурсивному решению задачи необходимо, когда сама природа задачи является рекурсивной. Это проявляется если:
1. обрабатываемые данные имеют рекурсивную природу
2. нет для задачи итеративного способа решения – в этом случае применяют метод полного или частичного перебора возможных вариантов решения задачи.
Рекурсивные алгоритмы наиболее пригодны в случаях, когда поставленная задача или используемые данные определены рекурсивно. В тех случаях, когда вычисляемые значения определяются с помощью простых рекуррентных соотношений, гораздо эффективнее применить итеративные методы. Таким образом, определение корня математической функции, возведение в степень и вычисление факториала только иллюстрируют схемы организации рекурсивных функций, но не являются примерами эффективного применения рекурсивного подхода к вычислениям.