Рекурсия в Delphi: Кривая Гильберта

Следующая программа вычерчивает в диалоговом окне кривую Гильберта. На рис. 12.7 приведены кривые Гильберта первого, второго и третьего порядков. Если присмотреться, то видно, что кривая второго порядка получается путем соединения прямыми линиями четырех кривых первого порядка. Аналогичным образом получается кривая третьего порядка, но при этом в качестве "кирпичиков" используются кривые второго порядка. Таким образом, чтобы нарисовать кривую третьего порядка, надо нарисовать четыре кривых второго порядка. В свою очередь, чтобы нарисовать кривую второго порядка, надо нарисовать четыре кривых первого порядка. Таким образом, алгоритм вычерчивания кривой Гильберта является рекурсивным.

 

 Диалоговое окно программы Кривая Гильберта, в котором находится кривая пятого порядка, приведено на рис. 12.8, текст программы — в листинге 12.4.

Рис. 12.7. Кривые Гильберта первого, второго и третьего порядков

 Кривые первого порядка получаются путем соединения кривых нулевого порядка (точек)

 

Кривая второго порядка (а2| образуется путем соединения четырех кривых первого порядка (элементов d, а. а и с)

Кривая третьего порядка получается путем соединения кривых d, a, a и с второго порядка

Рис. 12.8. Кривая Гильберта пятого порядка

Листинг 12.4. Кривая Гильберта


 

Следует обратить внимание на следующую особенность реализации программы. Процедура, которая вычерчивает элемент а, помимо самой себя (для вычерчивания элемента а кривой более низкого порядка) вызывает процедуры d и ь, описание (текст) которых в тексте программы находится после процедуры а. Чтобы компилятор не вывел сообщение об ошибке, в текст программы помещено объявление процедуры с ключевым словом forward, означающим, что это только объявление, а описание (реализация) находится дальше. Таким образом, уже в процессе компиляции процедуры а, компилятор "знает", что имена ь и d означают процедуры.

dle

Помоги проекту! Расскажи друзьям об этом сайте: