Главное требование к рекурсивным программам заключается в том, что вызов рекурсивных процедур должен выполняться по условию, которое на каком-то уровне рекурсии станет ложным.
Существуют 3 формы рекурсивных процедур:
1. форма с выполнением действий до рекурсивного вызова (на рекурсивном спуске):
procedure rec;
begin
s:=..;
if <условие> then rec;
end;
2. форма с выполнением действий после рекурсивного вызова (на рекурсивном возврате):
procedure rec;
begin
if <условие> then rec;
s:=..;
end;
3. форма с выполнением действий как до, так и после рекурсивного вызова (выполнение действий, как в рекурсивном спуске, так и в рекурсивном возврате).
Пример 1.
procedure rec;
begin
fl;
if <условие> then rec;
end;
Пример 2.
procedure rec;
begin
if <условие> then
begin
fl;
rec;
f2;
end;
end;
Задача 8.8. Составить процедуру вывода на печать символов строки в обратном направлении.
Листинг программы
Uses crt;
Procedure r;
Var
с: char;
Begin
If not eoln then
Begin
Read(c);
R;
Write(c);
End;
End;
Begin
Clrscr;
R;
End.
Задача 8.9 о перевёртывании строки. Составить программу, которая позволяет вводить любой текст, и слово "end" будет прекращать работу программы.
|
|
Uses crt;
Type
st = string[20];
Var
s, s1: st;
Function r (s_t:st): st;
Var
fl: char;
f2:st;
begin
if length (s_t) = 1 then r:= s_t;
else
begin
fl:= s_t[l];
delete (s_t, 1, 1);
f2:=r(s_t);
r:= concat (f2,fl);
end;
end;
begin
clrscr;
repeat
writeln ('введите любой текст');
writeln ('слово "end" прекратит программу');
readln (s);
s1:= г (s);
writeln (s1, ' есть перевёрнутая ', s);
until s = 'end';
end.