
- •Раздел 5 Алгоритмизация и программирование Тема 5.1 Алгоритм и его свойства. Способы записи алгоритма
- •Свойства алгоритма
- •Формы представления алгоритма
- •Тема 5.2 Базовые алгоритмические структуры Общая характеристика структурного программирования
- •Линейная алгоритмическая структура
- •Разветвляющаяся алгоритмическая структура
- •Циклическая алгоритмическая структура
- •Тема 5.3 Типовые алгоритмы Алгоритм поиска минимума в массиве, состоящего из трёх элементов
- •Алгоритм циклического сдвига одномерного массива на один шаг вправо
- •Алгоритм сортировки по возрастанию одномерного массива
- •Тема 5.4 Рекурсивные алгоритмы Обращение к подпрограммам
- •Понятие рекурсии
- •Виды рекурсии
Тема 5.4 Рекурсивные алгоритмы Обращение к подпрограммам
Когда одни и те же вычисления должны выполняться в различных участках программы, собственно расчетные операции выделяют в подпрограмму.
Разрабатывая схему алгоритма, мы должны всегда доводить ее до уровня типовых приемов программирования. Для каждого из типовых приемов программирования на схеме алгоритма имеется один вход и один выход. Это означает, что на укрупненной схеме алгоритма соответствующие участки выглядят как линейные. Поэтому и удается на укрупненной схеме избегать ненужных подробностей, детализируя их по мере необходимости, при раскрытии структуры отдельных блоков.
Пример использования подпрограмм:
алг Alg(арг вещ X, Y, Z, рез вещ D) алг F1(арг вещ Arg, рез вещ Res)
нач нач
| ввод X, Y, Z | Res:=Arg*Arg
| A:=F1(X) кон
| B:=F2(Y,Z)
| C:=F2(A,B) алг F2(арг вещ Arg1, Arg2, рез вещ Res)
| D:=A+B+C нач
| вывод D | Res:=Arg1*Arg2
кон кон
Схема алгоритма:
Понятие рекурсии
Рекурсивным называется алгоритм (или функция), содержащий в себе вызов самого себя (обращение к самому себе). Простой рекурсией является использование операции присваивания в следующем виде:
a:=a+1.
Классическим примером рекурсивного алгоритма является функция вычисление факториала целого числа N! = 1·2·3·…·N, N ≥ 0, 0! = 1.
алг Факториал(арг цел N, рез цел F)
нач
| если N=0
| | то F:=1
| | иначе F:=Факториал(N-1)*N
| все
кон
Результатом работы следующего алгоритма:
алг
нач
| A:=Факториал(5)
| вывод A
кон
является значение A=120=5!.
Из рекурсивной функции необходимо предусмотреть выход, иначе вызов такой функции может привести к «зависанию» алгоритма. В рассмотренном примере условием выхода из рекурсии является проверка условия N=0, при выполнении которого функция возвращает 1. Однако данное условие неработоспособно, если будет введено отрицательное значение (N<0) аргумента функции. В этом случае функция F будет бесконечно вызывать саму себя, поэтому для предотвращения бесконечной рекурсии здесь необходимо предусмотреть и проверку условия N<0, при выполнении которого должно выдаваться сообщение об ошибке ввода.
Виды рекурсии
Рекурсия бывает прямой и косвенной:
прямой называется рекурсия, когда обращение к самому себе содержится в самом алгоритме (функции);
косвенной называется рекурсия, когда обращение к данному алгоритму (функции) содержится в другом алгоритме (функции), к которому данный алгоритм имеет обращение (т.е. обращение к самому себе происходит не прямо, а опосредованно через другой алгоритм).