
- •Центр Компьютерного Обучения
- •Подпрограммы: процедуры.
- •1. Структурное программирование и технология нисходящего программирования.
- •2. Подпрограммы в языке Pascal. Понятие «процедура».
- •3. Формальные и фактические параметры.
- •4. Параметры-значения и параметры-переменные (входные и выходные параметры) подпрограмм, механизм передачи параметров (можно перенести на Занятие 2, если не хватит времени).
- •5. Локальные и глобальные переменные, область действия переменных
- •Подпрограммы: функции
- •Функция не имеет выходных параметров, она возвращает единственное значение (результат);
- •Рекурсия
- •Строковый тип данных – String
- •6. Для обработки строковых данных можно использовать стандартные процедуры и функции, описание которых можно найти в [1] или в любом справочнике по Pascal.
- •1. Общие сведения.
- •5. Доступ к компонентам файла.
- •Дополнительно (на усмотрение преподавателя!!!) процедуры Rename и Erase.
- •Текстовые файлы
- •1. Назначение.
- •Типизированные файлы
- •Динамические структуры данных
- •1. Статическая и динамическая память.
- •Распределение памяти.
- •2. Статические и динамические переменные.
- •Статическая переменная:
- •4. Доступ к переменной по указателю.
- •5. Управление динамической памятью (процедуры New и Dispose).
- •Формирование с помощью указателей однонаправленного списка по принципу стека, поиск элемента
- •Однонаправленный список
- •Пояснения к программе
- •Формирование с помощью указателей однонаправленного списка по принципу «очереди», поиск элемента
- •Пояснения к программе
- •Удаление элемента из линейного однонаправленного списка
Рекурсия
Рекурсия – это такой способ организации вычислительного процесса, при котором процедура или функция в ходе выполнения составляющих ее операторов обращается сама к себе.
Пример. Вычислить n! (факториалом натурального числа n называют произведение чисел 1*2*3*4*…*n). Число n вводится с клавиатуры.
Program Rekursia; Uses Crt; Var N : Integer; F : Longint; Function Faktorial( N : Integer ) : Longint; Begin If N=1 Then Faktorial:=1 Else Faktorial:=N*Faktorial(N-1); End; Begin Clrscr; Writeln(‘Введите целое число N < 20’); Readln(N); F:=Faktorial(N); Writeln(‘N!=’,F); Readkey; End. |
{заголовок программы}
{раздел описания переменных} {тип Longint – это целые числа} {в диапазоне -231…+ 231-1} {описание рекурсивной функции}
{проверка условия завершения рекурсии}
{рекурсивное вычисление n!}
{начало основной программы}
{ввод числа N с клавиатуры}
{вызов функции} |
После запуска программы на экран выводится сообщение «Введите целое число N < 20», затем с клавиатуры считывается значение целого числа N и в выражении F:=Faktorial(N) вызывается функция Faktorial с параметром-значением N. В подпрограмме-функции вычисления факториала проверяется условие N=1. Если оно выполняется, то имени функции Faktorial присваивается значение 1, на этом выполнение подпрограммы завершается. Если условие N=1 не соблюдается, то выполняется вычисление произведения N*Faktorial(N-1). Вычисление произведения носит рекурсивный характер, т. к. при этом осуществляется вызов функции Faktorial(N-1), значение которой вычисляется, в свою очередь, через вызов функции Faktorial(N-2), которая также будет вызывать функцию Faktorial(N-3), и т. д. до тех пор пока значение формального параметра N не станет равным 1. Т. к. базовая часть описания рекурсивной функции Faktorial определяет значение Faktorial=1 для N=1, то рекурсивные вызовы функции больше не выполняются, а наоборот, выполняется вычисление функции Faktorial для чисел, возрастающих от 1 до N, причем функция Faktorial всякий раз возвращает значение, равное произведению очередного k-ого числа на факториал от (k-1)-ого числа. Последнее возвращение результата вычисления функции Faktorial присвоит переменной F значение произведения всех чисел от 1 до N, т. е. факториал числа N.
Использование рекурсии обычно выглядит более изящно, чем итерационная, и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение оперативной памяти компьютера.