{
float k = 0.5;
Circle (x, y, R); // рисуемокружность
if (n == 1) return; // все нарисовали, выход
RecCircle(x+R, y, k*R, n-1); // четыре рекурсивных вызова
RecCircle(x-R, y, k*R, n-1);
RecCircle(x, y+R, k*R, n-1);
RecCircle(x, y-R, k*R, n-1);
}
Процедура для рисования такой фигуры принимает 4 параметра – координаты центра базовой окружности (x,y), ее радиус R и количество уровней n, которые надо нарисовать. На следующем уровне радиус изменяется в k раз (в примере – k=0.5), количество оставшихся уровней уменьшается на 1, и пересчитываются координаты для 4-х окружностей следующего уровня.Важно доказать, что рекурсия закончится. В самом деле, как видно из процедуры, при n = 1 рекурсия заканчивается. При каждом новом рекурсивном вызове количество уровней n уменьшается на 1, поэтому если в самом начале n > 0, то оно достигнет значения 1 и рекурсия завершится. Для большей «защиты от дурака» лучше условие окончания рекурсии записать так:
if (n <= 1) return;
Если этого не сделать, рекурсия никогда не завершится (теоретически), если в начале задали n < 1. Основная программа получается очень короткой – в ней надо открыть окно для графики, и один раз вызвать процедуру RecCircle.
#include <conio.h>
#include <graphics.h>
// сюда надо вставить процедуру
Main()
{
initwindow(600, 500);