
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •220301 Автоматизированные системы обработки информации и правления
- •Введение
- •Основные этапы решения задач на эвм
- •Глава 1 способы записи алгоритма
- •1.1 Алгоритм и его свойства
- •Схемы алгоритма
- •1.2 Структуры алгоритмов
- •1.2.1 Алгоритм линейной структуры
- •1.2.2 Алгоритм разветвляющейся структуры
- •1.2.3 Алгоритм циклической структуры
- •1.2.4 Алгоритм со структурой итерационных циклов
- •1.2.5 Алгоритм со структурой вложенных циклов
- •Глава 2 программа на языке высокого уровня
- •2.1 Системы программирования
- •2.2 Характеристика языка программирования Паскаль
- •2.3 Алфавит и структура программы на Паскале Алфавит программы
- •Структура программы
- •Глава 3 Стандартные типы данных
- •3.1 Данные. Типы
- •3.2 Вещественные типы
- •3.3 Целочисленные типы
- •3.4 Символьный тип
- •3.5 Логический тип
- •4 Представление основных структур программирования: итерация, ветвление, повторение
- •4.1 Линейная структура (следование)
- •Var X,y,f: real;
- •4.2 Разветвляющая структура (ветвление)
- •4.3 Циклическая структура (повторение)
- •4.3.1 Оператор цикла с параметром
- •I : Integrer; {номер числа }
- •4.3.2 Оператор цикла с постусловием
- •I,n: integer;
- •4.3.3 Оператор цикла с предусловием
- •4.3.4 Итерационные циклы
- •Var r,a:real;
- •Приближенное вычисление функций
- •Решение уравнений приближенными методами
- •Метод деления отрезка пополам
- •Xsl, Xpr, a, b, e, y1, y2, Lev, Prav, y: Real;
- •Метод Ньютона
- •Метод прохождения отрезка с переменным шагом
- •Вычисление определенных интегралов
- •1. Метод прямоугольников
- •X: Real;
- •2. Метод трапеций
- •X: Real;
- •Глава 5 Типы данных, определяемые пользователем
- •5.1 Пользовательский тип данных
- •5.1.1 Типизированные константы
- •5.1.2 Перечисляемый тип
- •I:1..6; loto: num;
- •5.2 Массивы
- •I : integer;
- •5.2.1. Работа с одномерными массивами
- •I,sum : integer;
- •Var a: array [1..N] of real;
- •Var I,s,r: integer;
- •I : list;
- •I : integer;
- •X : mass;
- •I, j, p, n, m, k:integer;
- •I, j, k, nd : integer;
- •Xmin : real;
- •X : mass;
- •Var I, j, nd : integer;
- •X : mass;
- •5.2.2 Работа с двумерными массивами( матицы)
- •Var I,j,n : integer;
- •I,j,n,m : integer;
- •5.2.3 Сортировка массивов
- •Сортировка методом "пузырька"
- •X : Array [1..Nmax] Of Real;
- •X : Array [1..Nmax] Of Real;
- •Сортировка выбором
- •Обменная сортировка
- •Var m:array[1..1000] of integer;
- •I,z,n:integer; Key:byte;
- •Сортировка слиянием
- •Var { Описание массивов и переменных}
- •X, y: array[1..1000] of integer;
- •5.3 Строковые типы
- •Var s: string[10];
- •5.3.1 Операции над строками
- •5.3.2 Стандартные процедуры и функции для строк
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Роs
- •I, n, p: integer;
- •I: integer;
- •I: integer;
- •Insert (word2, text, I);
- •Insert (chr (k-32), t, I);
- •Insert (chr (k-80), t, I);
- •Insert (‘е’, t, I);
- •Глава 6 Процедуры и функции
- •6.1 Процедуры
- •I : Integer;
- •I, n: integer;
- •Input _ mas (k, n);
- •I,n : Integer;
- •I,k : Integer;
- •6.2 Функции
- •I:Integer;
- •2) Массивы;
- •I,n : Integer;
- •I : Integer;
- •I,tn,tk:Real;
- •Глава 7 Программирование рекурсивных алгоритмов
- •7.1 Понятие рекурсии
- •7.2 Техника построения рекурсивных алгоритмов
- •7.3 Формы рекурсий
- •If Prim(I) then
- •7.4 Рекурсия и итерация
- •7.5 Программирование с использованием рекурсии
- •Var p: Integer;
- •Var X, y: Integer; begin
- •Var z: Real; begin
- •Var I:integer; j:real;
- •Глава 8 Файлы
- •8.1 Текстовые файлы
- •I,n : Integer; {Вспомогательные переменные}
- •8.2 Типизированные файлы
- •X,m,s : Real;
- •8.3 Нетипизированные файлы
- •Глава 9 Записи
- •9.1 Описание записи
- •I: integer;
- •9.2 Оператор присоединения
- •I, j, k, m : integer;
- •X: real;
- •9.3 Вложенные записи
- •9.4 Записи с вариантами
- •Information: record
- •I, k, n : integer;
- •Vedom : Array [1..Nmax] Of Stud;
- •I,j : Integer;
- •Vedom : File Of Stud;
- •Vedom : File Of Stud;
- •I,j,kdv,k2 : Integer;
- •If Not Eof (Ftel) Then
- •If Not Eof(Ftel) then
- •If Not Eof(FilComp) then
- •Глава 10 Динамические структуры данных
- •10.1 Распределение памяти при выполнении программ
- •Верхняя граница памяти ms-dos
- •10.2 Ссылочные переменные
- •10.3 Процедуры управления кучей
- •10.4 Использование переменных ссылочного типа
- •I: Integer;
- •I, k : Integer;
- •Val(b, k, code);{Превратили второй символ в ч исло}
- •10.5 Списки
- •Var Ch : Char;
- •Var Ch : Char;
- •10.6 Деревья
- •10.7 Константы ссылочного типа
- •Глава 11. Язык Паскаль. Графический модуль Graph Список используемой литературы Основная
- •Дополнительная
Глава 7 Программирование рекурсивных алгоритмов
7.1 Понятие рекурсии
Рекурсия - это способ определения процесса/объекта «в терминах самого себя», в терминах некоторого более простого случая этого же процесса/объекта. Рекурсивные определения используются во многих областях науки, особенно в математике. В математике рекурсией называется способ описания функций или процессов через самих себя. Примером рекурсивно описываемой функции является факториалъная функция:
0! = 1;
для всех n > 0 n! = n*(n-1)!,
которая
для
n
> 0 определяется рекуррентным соотношением
через значение факториала от (n-1);
в свою очередь, (n-1)!
определяется через (n-2)!
и т. д. до сведения к значению 0!, которое
определено явно и равно единице. Любое
рекурсивное описание должно содержать
явное определение функции для
некоторых/начальных значений
аргумента/аргументов, к которому
сводится процесс вычисления значения
функции в общем случае. Число промежуточных
вычислений этой же функции в процессе
вычисления ее значения для заданных
аргумента/аргументов - это глубина
рекурсии. Для
факториальной функции глубина рекурсии
при любом значении аргумента очевидна,
например при вычислении 3! рекурсия
имеет глубину в 3 уровня. Однако обычно
глубина рекурсии не является столь
очевидной даже при простейших описаниях.
Примером может служить рекурсивное
определение биномиальных
коэффициентов или числа сочетаний
:
=
1 для п
> 0;
= 0 для т > п 0;
=
+
для
n
т>о.
Здесь уже не очевидно, какая глубина рекурсии будет достигнута при конкретных вычислениях. Однако в общем случае можно утверждать, что указанные рекурсивные вычисления требуют конечной глубины рекурсии. Если описание предназначено для практических вычислений, то глубина рекурсии должна быть конечной.
Рекурсивные определения часто используются и в информатике. Например, описание синтаксиса формальных языков с помощью БНФ-нотаций (форм Бэкуса-Наура). В языках программирования рекурсия используется как способ описания подпрограмм (прежде всего функций), содержащих прямо или косвенно обращение к себе самой. Для исполнения таких подпрограмм требуется особая организация вычислительного процесса, так как при рекурсивных вычислениях необходимо сохранение информации об иерархии связей и локальных переменных всех рекурсивных вызовов, чтобы по окончании цепочки рекурсивных вызовов можно было восстановить каждое предшествующее прерванное состояние подпрограммы. Почти все системы рекурсивного программирования основываются на идее стека. Стеком является структура памяти магазинного типа LIFO (Last In First Out) - «последним пришел - первым ушел».
Рекурсия вошла в программирование в значительной степени благодаря системам обработки списков и языкам функционального программирования, где использование рекурсии естественно в силу рекурсивной природы реализуемого вычислительного процесса и рекурсивной структуры обрабатываемых данных. Проникновение рекурсивных методов в практику традиционного (императивного) программирования началось с языка Алгол, допускающего рекурсивные обращения к процедурам. Дальнейшая практика рекурсивных вычислений показала, что разумное применение рекурсии является эффективным методом программирования, существенно упрощает запись многих сложных алгоритмов, а в ряде случаев оказывается незаменимым средством. Область практического применения рекурсии - это сложные задачи численного анализа, алгоритмы трансляции, операции над списками, алгоритмы последовательных испытаний и многое другое.