Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Рекурсия в графике (Построение кривой Гильберта)

Автор: Ametist 10.05.2008 18:51

Задание построить кривую Гильберта. Вроде бы все должно работать, но как только дело доходит до построения выдает "Ошибка 202. Стек переполнен". Помогите разобраться почему.


Program Gilbert;
uses Crt,Graph;
Var
h,gd,gm:integer;
a:byte;
n:byte;

Procedure LD;
Begin
Linerel(0,h);
End;

Procedure LU;
Begin
Linerel(0,-h);
End;

Procedure LL;
Begin
Linerel(-h,0);
End;

Procedure LR;
Begin
Linerel(h,0);
End;

Procedure GDw(i:byte);ForWard;
Procedure GUp(i:byte);ForWard;
Procedure GL(i:byte);
Begin
GDw(i-1);LL;
GL(i-1);LD;
GL(i-1);LR;
GUp(i-1);Delay(5000);
End;

Procedure GR(i:byte);
Begin
GUp(i-1);LR;
GR(i-1);LU;
GR(i-1);LL;
GDw(i-1);Delay(5000);
End;

Procedure GUp;
Begin
GR(i-1);LU;
GUp(i-1);LR;
GUp(i-1);LD;
GL(i-1);Delay(5000);
End;
Procedure GDw;
Begin
GL(i-1);LD;
GDw(i-1);LL;
GDw(i-1);LU;
GR(i-1);Delay(5000);
End;


Begin
clrscr;
Write('vvedite dlinu storoni v pixselyah');
Readln(h);
Write('vvedite poryadok krivoi');
Readln(n);
gd:=detect;gm:=0;
InitGraph(gd,gm,'');
Moveto(100,100);
GUp(n);
Readln;
CloseGraph;
Readln;
End.


Автор: volvo 10.05.2008 19:10

У тебя нет условия выхода из рекурсии...

Procedure GL(i:byte);
Begin
if i > 0 then begin { <--- Вот это условие }
GDw(i-1);LL;
GL(i-1);LD;
GL(i-1);LR;
GUp(i-1);Delay(5000);
end;
End;

и так далее, во всех процедурах, имена которых начинаются с G...

Автор: Ametist 10.05.2008 19:17

Эх, вот это я тупое животное=) Спасибо большое=)