Теоретический материал

Требования к знаниям

Перед выполнением практической работы студент должен

знать:

- основные элементы IDE Delphi и принципы работы в ней;

- основные операторы языка Object Pascal.

 

после выполнения практической работы студент должен

уметь:

- разрабатывать алгоритмы с использованием рекурсивных подпрограмм.

 

 

Подпрограммы - процедуры и функции, в языке Delphi служат для выполнения специализированных операций. Процедура Delphi выполняет требуемые операции, но никаких результатов своих действий не возвращает. Результат - в тех изменениях, которые произошли в программе в процессе выполнения этой процедуры. В частности, процедура может поменять значения переменных, записать новые значения в ячейки компонентов, сделать запись в файл и т.д.Если процедура относится к объекту (т.е. является его методом), то нужно написать в объявлении имя объекта, а после точки - имя процедуры. Если процедура не относится к объекту, она должна быть описана до начала использования.Чтобы процедуры можно было использовать до ее реализации, нужно в разделе interface описать её, например: Если процедура относится к объекту (является её методом), то не имеет значения, где она написана и где вызывается, т.к. классы имеют область описания и она доступна компилятору: По этому описанию компилятор узнаёт о существовании процедур. Функция Delphi также позволяет выполнить всё перечисленное, но дополнительно возвращает результат в присвоенном ей самой значении. То есть вызов функции может присутствовать в выражении справа от оператора присваивания. Таким образом, функция - более универсальный объект.Результат выполнения функции можно записывать в Result или присваивать самому имени функции. Result работает как простая переменная, хотя она нигде не описанаю Она всегда существует в функциях и имеет тип возвращаемого функцией значения. Рекурсия это возможность подпрограммы в процессе работы обращаться к самой себе. При этом в подпрограмме обязательно должно быть условие, при выполнении которого дальнейшая рекурсия прекращается, иначе подпрограмма зациклится.Рекурсивные процедуры (recursive procedure) - это процедуры, которые вызывают сами себя.При работе с рекурсивными алгоритмами следует избегать трех основных опасностей:- бесконечная рекурсия(алгоритм должен иметь надежное условие остановки);- глубокая рекурсия (Если алгоритм вызывает слишком глубокую рекурсию, он исчерпает всю память стека. Сократите использование стека, уменьшив количество переменных, которые размещает процедура, или описывая переменные глобально. Если процедура все еще исчерпывает память стека, перепишите алгоритм без рекурсии с помощью устранения хвостовой рекурсии);- неуместная рекурсия(Обычно это происходит, когда алгоритм, подобный рекурсивному алгоритму подсчета чисел Фибоначчи, много раз вычисляет одни и те же промежуточные значения. Если в вашей программе возникают проблемы подобного рода, попытайтесь переписать алгоритм методом снизу вверх. Если алгоритм нельзя преобразовать с помощью восходящего способа, создайте таблицу соответствия промежуточных значений).Вычисление факториала - классическая в программировании задача на использование рекурсии.N! = 1*2* ... *(N-1)*N = N*(N-1)!