Void RecCircle ( float x, float y, float R, int n )

{

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);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: