Рекурсия часто используется в графике. Рассмотрим некоторые примеры.
Задача. Составить рекурсивный алгоритм рисования окружностей следующего вида:
Центральная окружность радиуса R, на этой окружности симметрично располагаются 4 окружности радиуса R/2 каждая. На каждой из этих 4-х окружностях аналогичным образом строятся еще 4 и т.д. Рисование прекращается, если радиус последних становится меньше некоторого числа k. Рисование окружностей будем производить относительно центральной окружности с центром (x,y). Центр первой окружности - (x+R,y), второй - (x,y+R), третьей - (x-R,y), четвертой - (x,y-R).
Решение:
uses crt,graph;
var
gd,gm,mx,my:integer;
ch:char;
procedure krug(x,y,r:integer);
begin
if r>k then
begin
krug(x+r,y,r div 2);
krug(x,y+r,r div 2);
krug(x-r,y,r div 2);
krug(x,y-r,r div 2);
end;
circle(x,y,r);
end;
Procedure Init; {инициализация графического режима}
var err: integer;
begin
DetectGraph(gd,gm);
InitGraph(gd,gm,' путь драйвера');
if GraphResult<>grok then
begin
Writeln(GraphErrorMsg(err));
Readln; Halt(1);
end;
end
BEGIN
Init;
krug(getmaxX div 2, getmaxY div 2, getmaxY div 4);
END.