Пример 3.1.
Function HlighFactor(N1 ,N2:lnteger):lnteger;
Var P: Integer;
Begin
If N1 > N2 Then P:=HighFactor(N1,N2)
Else
If N2<0 Then р:=N1 {нерекурсивное решение}
Else P:=HighFactor(N2,N1 Mod N2);
HighFactor := P
End;
Дл того чтобы выполнение рекурсивной программы завершалось, необходимо существование в наиболее простых случаях нерекурсивного решения. В противном случае не исключено зацикливание.
Некоторые алгоритмы гораздо проще описать, используя рекурсию нежели итерацию. Это относится в первую Очередь к алгоритмам, работающим с разного рода списковыми структурами.
Использование рекурсивных процедур и функций делает программу целом более гибкой и наглядной, но не всегда эффективной, так как работает такая программа, как правило, медленнее и требует больше памяти. Дело том, что при каждом вызове рекурсивной процедуры или функции отводится память под локальные переменные.
При сравнении итерационных методов решения и методов, использующих рекурсию, часто эффективными оказываются первые. Таким образом, рекурсии следует применять только там, где нет очевидного итерационного решения. Уровень вложенности рекурсий может быть ограничен в конкретных реализациях языка.
Различают прямую и косвенную рекурсию. Функция HighFactor являете характерным примером прямой рекурсии. Косвенная рекурсия возникает тогда когда один блок вызывает второй, а второй, в свою очередь, первый.
C.10.6. Лекция 6 (1 часа)Понятие данных символьного типа. Представление символов в ЭВМ. Таблица ASCI. Операции над символьными данными. Функции CНR( ), ORD( ), SUCC( ), PRED( ).Символьные строки (string). Операции над строками, встроенные процедуры и функции для работы со строками символов
String (строка) - это один из дополнительных типов данных, введенных в системе программирования Турбо-Паскаль. Структура данных типа String [N]аналогична структуре данных типа Array [1..N]Of Char.Количество символов в данных типаString [N] может быть любым от 1 до N. Максимальное возможное значение константы N=255. Это максимальное значение принимается по умолчанию, если в описании строки отсутствует конструкция [N]. В отличие от массивов строки (а не только их отдельные элементы) могут быть параметрами в процедурах ввода и вывода.
К любому символу в строке можно обратиться точно также, как к элементу одномерного массива, указав имя строки и индекс. В системе Турбо-Паскаль для работы со строками предусмотрен ряд процедур и функции:
К строкам можно применять операцию “+”- сцепление, например:
st:= ‘a’ + ‘b’;
st:= st + ‘c’; {st содержит ‘abc’}
Copy(st, index, count) - функция типа String; копирует из строки st count символов, начиная с символа с номером index.
Delete(st, index, count) - процедура; удаляет сount символов в строке st, начиная с символа с номером index.
Insert(subst, st, index) - процедура; вставляет подстроку subst в строку st, начиная с символа с номером index.
Length(st) - функция типа Integer; возвращает длину строки st.
Pos(subst,st) - функция типа Integer; отыскивает в строке st первое вхождение подстроки subst и возвращает номер позиции, с которой она начинается; если подстрока не найдена, возвращается 0.
Str(x:[width[ : decimals] ], st) - процедура; преобразует число x вещественного или целого типов в строку символов st так, как это делает процедура Writeln перед выводом.
Val(st,x,code) - процедура; преобразует строку символов st во внутреннее представление целой или вещественной переменной x, которое определяется типом этой переменной; параметр code содержит ноль, если преобразование прошло успешно, и тогда в x помещается результат преобразования, в противном случае он содержит номер позиции в строке st, где обнаружен ошибочный символ, и в этом случае содержимое x не меняется; ведущие пробелы в строке st должны отсутствовать.
Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов.
Дата добавления: 2014-12-24; просмотров: 1603;