Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_po_Pascal_2_chast.doc
Скачиваний:
107
Добавлен:
18.02.2016
Размер:
5.11 Mб
Скачать

Рекурсия

Рекурсивное объявление объекта подразумевает определение объекта частично или полностью через (с помощью) этот объект.

Пример: факториал — или— рекурсивное объявление.

Рекурсия — это такой способ организации процесса, при котором подпрограмма, в ходе выполнения составляющих её операторов, обращается к самой себе. Обращение может быть прямое или косвенное.

Рекурсия

прямая

косвенная

Внутри подпрограммы вызывается эта же подпрограмма.

Подпрограмма обращается к себе через другие подпрограммы.

Procedure A;

Begin

A;

End;

Procedure A;

Begin

A;

End;

Procedure B;

Begin

C;

End;

Procedure C;

Begin

A;

End;

Рекурсия обеспечивается за счет того, что память под локальные переменные подпрограмм резервируется в стеке.

Главное требование к рекурсивным подпрограммам: в них обязательно должна присутствовать проверка завершения рекурсивного вызова.

Структура конечного рекурсивного алгоритма:

If {условие}

Then {действия, не содержащие рекурсивного вызова}

Else {действия с рекурсивным вызовом}

Вычисление факториал:

Function fact1(n: byte):integer;

Begin

If n=0 then

f:=l

else

for i:=l to n do

f:=f*i;

Fact1:=f;

End;

Function fact2(n: byte):integer;

Begin

If n=0 then

fact2:=l

else

fact:=fact(n-l)*n;

End;

Числа Фибоначчи — это элементы числовой последовательности 1 ,1, 2, 3, 5, 8, …, в которых каждый последующий элемент равен сумме предыдущих: , где и .

function fibonacci( N : integer): integer;

begin

if then

fibonacci:=1

else

fibonacci:=fibonacci(N-l)+fibonacci(N-2);

end;

Точных правил для выбора между рекурсивной и нерекурсивной версиями алгоритма решения задачи не существует. Краткость и выразительность большинства рекурсивных процедур упрощает их чтение и сопровождение. С другой стороны, выполнение рекурсивных процедур требует больших затрат и памяти, и времени процессора нежели их итерационные аналоги.

Нелинейные структуры данных. Деревья

Дерево — это иерархическая структура, состоящая из узлов (вершин) и соединяющих их дуг (ветвей). В каждый узел кроме одного (который называется корнем дерева) ведет ровно одна дуга.

Т.о. дуги ведут к узлам дерева. Можно также сказать, что дуги ведут к частям дерева, которые сами являются деревьями.

Рекурсивное определение дерева: Дерево - это либо пустая структура, либо узел, связанный дуга­ми с конечным числом деревьев (поддеревьев).

Рекурсивное и нерекурсивное определения дерева равносильны, но из второго можно извлечь много полезных алгоритмов.

Вершина Y, находящаяся непосредственно ниже вершины X, называется потомком X, а вер­шина X - предком Y.

Считается, что корень дерева находиться на 0 уровне, непосредственные потомки корня на 1 уровне и т.д. максимальный уровень какой-нибудь из вершин дерева - глубина дерева.

Если вершина не имеет потомка, то её называют листом, а любую вершину, не лист, - внут­ренней вершиной.

Степень вершины - это число непосредственных потомков вершины. Максимальная степень из степеней всех вершин - степень дерева.

Число ветвей, которые нужно пройти от корня до вершины - длина пути. Путь к корню равен 0.

Вершина, находящаяся на уровне i имеет путь i. Длина пути всего дерева - сумма длин путей всех его вершин.

Упорядоченное дерево - это дерево, у которого ветви (дуги, ребра), исходящие из каждой вер­шины, упорядочены.

Различают два типа деревьев: бинарные и сильноветвящиеся.

В бинарном дереве из каждой вершины выходит не более двух дуг. В сильноветвящемся дереве количество дуг может быть произвольным.

Логическое представление и изображение деревьев

Имеется ряд способов графического изображения деревьев.

Метод вложенных скобок

Примеры деревьев в жизни: генеалогическое дерево; книга, разбитая на главы, разделы, подразделы.

Рис. 10. Представление дерева: а)- исходное дерево, б)- оглавление книг

Блоки программ составляют дерево, дуги которого означают вложенность. Вза­имная вложенность операторов цикла, условных операторов, составных, - все это деревья. Даже арифметические выражения - деревья, в узлах которых операции.

Деревья используются также для хранения и поиска информации.

Особо важную роль играют деревья 2-ой степени - бинарные деревья.

Далее будем рассматривать только бинарные деревья.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]