- •1. Внутренняя сортировка (сортировка массивов).
- •6. Рекурсия. Рекурсивные функции
- •2.2 Обьявление класса
- •2.3 Определение функций-членов класса
- •2.4 Использование класса
- •2.5 Управление доступом к классу
- •1 Частные члены класса
- •10. Понятие дерева. Классификация деревьев. Способы представления дерева.
- •1. Вставка элемента.
- •2. Удаление элемента.
- •3. Последовательный поиск в списке.
- •2 Защищенные члены класса
- •3 Общедоступные члены класса
- •2.6 Указатель this
- •11. Общие операции над деревьями. Процедуры добавления и удаления элемента. Количество листьев и узлов в дереве.
6. Рекурсия. Рекурсивные функции
Объект называется рекурсивным, если он содержит сам себя или определен с помощью самого себя.
Если процедура р содержит явное обращение к самой себе, то она называется явно рекурсивной. Если процедура р содержит обращение к некоторой процедуре q, которая в свою очередь содержит прямое или косвенное обращение к р, то р - называется косвенно рекурсивной.
Но рекурсивная программа не может вызывать себя бесконечно, иначе она никогда не остановится, таким образом в программе (функции) должна присутствовать еще один важный элемент - так называемое терминальное условие, то есть условие при котором программа прекращает рекурсивный процесс.
Рекурсивные алгоритмы можно использовать для элегантного решения некоторых задач, из которых одна из наиболее распространенных — нахождение факториала числа. Факториалом называется произведение всех целых чисел от единицы до заданного.
Например:
8!=8*7*6*5*4*3*2*1=40320
int fact(int n)
{if(n= =0) return 1;
int f
f=n*fact(n-1);
return f;}
Рассмотрим задачу о Ханойских башнях. Имеются три стержня с номерами 1,2,3. На стержень 1 надето n дисков различного диаметра так, что они образуют пирамиду (см. рис. 30). Написать программу для печати последовательности перемещений дисков со стержня на стержень, необходимых для переноса пирамиды со стержня 1 на стержень 3 при использовании стержня 2 в качестве вспомогательного. При этом за одно перемещение должен переноситься только один диск, и диск большего диаметра не должен помещаться на диск меньшего диаметра. Доказано, что для n дисков минимальное число необходимых перемещений равно 2n-1.
Рис. 30. Задача о Ханойских башнях.
Для решения простейшего случая задачи, когда пирамида состоит только из одного диска, необходимо выполнить одно действие - перенести диск со стержня i на стержень j, что очевидно (этот перенос обозначается i -> j). Общий случай задачи изображен на рисунке 30 , когда требуется перенести n дисков со стержня i на стержень j, считая стержень w вспомогательным. Сначала следует перенести n-1 диск со стержня i на стержень w при вспомогательном стержне j, затем перенести один диск со стержня i на стержень j и, наконец, перенести n-1 диск из w на стержень j, используя вспомогательный стержень i. Итак, задача о переносе n дисков сводится к двум задачам о переносе n-1 диска и одной простейшей задаче. Схематически это можно записать так: T(n,i,j,w) = T(n-1,i,w,j), T(1,i,j,w), T(n-1,w,j,i).
Ниже приведена программа, которая вводит число n и печатает список перемещений, решающая задачу о Ханойских башнях при количестве дисков n. Используется внутренняя рекурсивная процедура tn(n,i,j,w), печатающая перемещения, необходимые для переноса n дисков со стержня i на стержень j с использованием вспомогательного стержня w при {i,j,w} = {1,3,2}.
/* ханойские башни */
#include <stdio.h>
main() /* вызывающая */
7. Классы в С++.Примеры.
2.1 Класс (class) - это тип, определяемый пользователем, включающий в себя данные и функции, называемые методами или функциями-членами класса.
Данные класса - это то, что класс знает.
Функции-члены (методы) класса - это то, что класс делает.
Таким образом, определение типа задаваемого пользователем (class) содержит спецификацию данных, требующихся для представления объекта этого типа, и набор операций (функций) для работы с подобными объектами.