Составители:
Рубрика:
{Исполнимая часть головной программы}
Begin
ClrScr;
WriteLn ('Введи количество членов ряда n');
ReadLn (n);
S: = Sum (n);
WriteLn ('Сумма S =', S: 5);
ReadKey;
End.
Протокол работы программы. Введи количество членов ряда n 10
Сумма S = 55
Опишем работу программы. Операция суммирования бу-
дет повторяться ровно n – 1 раз, поскольку функция Sum об-
ращается n – 1 раз к самой себе, при этом параметр каждый раз
уменьшается на единицу. В конце концов параметр станет рав-
ным 1, и рекурсивные вызовы закончатся, после чего все уже
вызванные функции одна за другой завершат свою работу.
Обратим внимание на следующие обстоятельства. Во-
первых, рекурсивная процедура или функция содержит все-
гда, по крайней мере, одну терминальную ветвь и условие
окончания (If n = 1 Then Sum = l). Во-вторых, при выполне-
нии рекурсивной ветви (Else Sum: = Sum (n – l) + n) процесс
выполнения подпрограммы приостанавливается, но его пе-
ременные не удаляются из стека. Происходит новый вызов
подпрограммы, переменные которой также помещаются в
стек, и т. д. Так образуется последовательность прерванных
процессов, из которых выполняется всегда последний, а по
окончании его работы продолжает выполняться предыдущий
процесс. Целиком весь процесс считается выполненным, ко-
гда стек опустеет, или, другими словами, все прерванные
процессы выполнятся.
Рекурсия полезна, прежде всего, в случаях, когда основ-
ную задачу можно разделить на подзадачи, имеющие ту же
структуру, что и первоначальная задача.
Не следует путать рекурсию с итерацией, которая реа-
лизуется при
помощи циклов.
Большинство алгоритмов можно реализовать двумя спо-
собами: итерацией и рекурсией. Вспомним пример с суммой,
90
{Исполнимая часть головной программы} Begin ClrScr; WriteLn ('Введи количество членов ряда n'); ReadLn (n); S: = Sum (n); WriteLn ('Сумма S =', S: 5); ReadKey; End. Протокол работы программы. Введи количество членов ряда n 10 Сумма S = 55 Опишем работу программы. Операция суммирования бу- дет повторяться ровно n – 1 раз, поскольку функция Sum об- ращается n – 1 раз к самой себе, при этом параметр каждый раз уменьшается на единицу. В конце концов параметр станет рав- ным 1, и рекурсивные вызовы закончатся, после чего все уже вызванные функции одна за другой завершат свою работу. Обратим внимание на следующие обстоятельства. Во- первых, рекурсивная процедура или функция содержит все- гда, по крайней мере, одну терминальную ветвь и условие окончания (If n = 1 Then Sum = l). Во-вторых, при выполне- нии рекурсивной ветви (Else Sum: = Sum (n – l) + n) процесс выполнения подпрограммы приостанавливается, но его пе- ременные не удаляются из стека. Происходит новый вызов подпрограммы, переменные которой также помещаются в стек, и т. д. Так образуется последовательность прерванных процессов, из которых выполняется всегда последний, а по окончании его работы продолжает выполняться предыдущий процесс. Целиком весь процесс считается выполненным, ко- гда стек опустеет, или, другими словами, все прерванные процессы выполнятся. Рекурсия полезна, прежде всего, в случаях, когда основ- ную задачу можно разделить на подзадачи, имеющие ту же структуру, что и первоначальная задача. Не следует путать рекурсию с итерацией, которая реа- лизуется при помощи циклов. Большинство алгоритмов можно реализовать двумя спо- собами: итерацией и рекурсией. Вспомним пример с суммой, 90
Страницы
- « первая
- ‹ предыдущая
- …
- 88
- 89
- 90
- 91
- 92
- …
- следующая ›
- последняя »