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

RecCircle ( 300, 250, 100, 3 ); // 3 уровня

Getch();








Дата добавления: 2015-10-05; просмотров: 790;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.