Пример. Рекурсивные фигуры. В центре рисунка - большая окружность. На ней находятся центры четырех окружностей меньшего диаметра, на каждой из которых - центры еще четырех окружностей еще меньшего диаметра и т.д. Всего - N разных диаметров (N уровней рекурсии).
Процедура
для рисования такой
фигуры принимает 4
параметра - координаты
центра базовой окружности (x, y), ее радиус R и количество уровней n,
которые надо нарисовать. На следующем
уровне радиус изменяется
в k раз
(в примере –
k=0.5), количество оставшихся уровней уменьшается
на 1 и
пересчитываются координаты для
4-х окружностей следующего уровня.
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);
}
Основная программа получается очень короткой - в ней надо включить монитор
в нужный графический режим, один
раз вызвать процедуру
RecCircle, сделать паузу
до нажатия на любую клавишу и выключить графический
режим.
#include <conio.h>
#include <graphics.h>
... // сюда надо вставить процедуру
void main()
{
int d = VGA, m = VGAHI;
initgraph(&gd, &gm, "c:\\borlandc\\bgi");
RecCircle ( 320, 240, 100, 3 );
getch();
closegraph();
}
initgraph(&gd, &gm, "c:\\borlandc\\bgi");
правильно вместо "&gd, &gm" - "&d, &m".