Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по информатике / Раздел05(Алгоритмизация и программирование).doc
Скачиваний:
125
Добавлен:
09.05.2015
Размер:
269.31 Кб
Скачать

Тема 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, при выполнении которого должно выдаваться сообщение об ошибке ввода.

Виды рекурсии

Рекурсия бывает прямой и косвенной:

  • прямой называется рекурсия, когда обращение к самому себе содержится в самом алгоритме (функции);

  • косвенной называется рекурсия, когда обращение к данному алгоритму (функции) содержится в другом алгоритме (функции), к которому данный алгоритм имеет обращение (т.е. обращение к самому себе происходит не прямо, а опосредованно через другой алгоритм).

21