- •Типы данных.
- •Ввод с клавиатуры.
- •Параметры-переменные и параметры-значения.
- •Категории параметров
- •Рекурсия.
- •Новые графические процедуры и функции.
- •Linestyle
- •Thickness
- •Построение звёзд.
- •Вертикально – горизонтальное отношение.
- •Поворот фигур.
- •Вывод текста.
- •Тип данных множество.
- •Тип данных записи.
- •Записи с вариантами.
- •Текстовые файлы.
- •Файлы с прямым доступом. Типизированные файлы.
- •Нетипизированные файлы.
- •Модули.
- •ЗАГОЛОВОК МОДУЛЯ
- •ИНИЦИАЛИЗАЦИОННАЯ ЧАСТЬ
- •Рекомендованная литература.
Одесский колледж компьютерных технологий “СЕРВЕР”
Рекурсия.
Подпрограмма в процессе выполнения может вызывать саму себя. Такая ситуация называется рекурсией. В математике очень часто встречаются последовательности чисел, в которых каждый последующий член выражается через предыдущие.
Рассмотрим для примера вычисление факториала числа N. Обычно его определяют как произведение всех целых чисел от 1 до N. Его легко вычислить следующим образом:
Var N,i,fact: integer; Begin
Readln (N); fact:=1;
For i:=1 to N do fact:=fact*i; Writeln (fact);
Readln End.
Но существует определение факториала через (N-1)!:
|
0!=1 |
|
N != N * (N −1)! |
при N >0 |
Программа, использующая рекурсивную функцию, имеет вид:
Var f , N : integer; Function Fact(i:integer); begin
If i=0 then Fact:=1
Else Fact:=i * Fact(i-1); End;
Begin Readln(N); F:=Fact(n); Writeln(f); Readln; End.
9
Одесский колледж компьютерных технологий “СЕРВЕР”
Чтобы понять, как работает эта программа, вспомним, что на время выполнения подпрограммы вызывающая программа приостанавливается, а в оперативной памяти выделяется место для локальных переменных и параметров вызванной подпрограммы. Таким образом, при вызовах подпрограмм в оперативной памяти «накапливаются» приостановленные подпрограммы. При рекурсивных вызовах функции Fact происходит то же самое, то есть для её локальных параметров и переменных отводятся новые ячейки в памяти. При завершении работы функции эти ячейки удаляются.
Главное требование к рекурсивным подпрограммам заключается в том, что вызов рекурсивной подпрограммы должен производиться по условию, которое на каком-то уровне рекурсии станет ложным. Если условие истинно, рекурсивный спуск продолжается. Когда оно станет ложным, спуск заканчивается и начинается рекурсивный возврат из всех вызванных на данный момент копий рекурсивной подпрограммы.
Существует 3 разные формы рекурсии:
1.С выполнением действий до рекурсивного вызова: Procedure rec;
Begin S;
If условие then rec; End;
2.С выполнением действий после рекурсивного вызова: Procedure rec;
Begin
If условие then rec; S;
End;
3.С выполнением действий как до, так и после рекурсивного вызова:
Procedure rec;
Begin
10