Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем ошибка? изучаю рекурсию 
:(
    Опции темы
МММ
Дата 26.12.2002, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



Код

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Canvas.Brush.Color:=clwhite;
form1.Canvas.Pen.Color:=clblack;
form1.Canvas.Rectangle(40,40,60,60);
paint(50,50);
end;

Procedure TForm1.paint(x,y:integer);
Begin
If form1.Canvas.Pixels[x,y]<>clblack then
begin
  form1.Canvas.Pixels[x,y]:=clred;
  paint(x+1,y);
  paint(x-1,y);
  paint(x,y+1);
  paint(x,y-1);
end;
end;


Во первых не закрашивает, а во вторых выдает ошибку StackOverflow ? :notify


--------------------
PM MAIL   Вверх
Vit
Дата 26.12.2002, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата
выдает ошибку StackOverflow ? :notify

StackOverflow - обычно если рекурсия "не выходит" т.е. программа зацикливается полностью. Пересмотрите условия выхода из рекурсии, я к коду не приглядывался но похоже что процедура вызывает саму себя с такими же параметрами.

Иногда StackOverflow возникает при очень большой глубине и массивных процедурах выхова (здесь это похоже не этот случай). Дело в том что рекурсия очень опасная штука - на этапе компиляции компилятор абсолютно не знает глубину вызова, но от него требуется зарезервировать память для стека, поэтому возможен вариант когда стека не хватает. В опциях линкера есть размеры стека и их можно изменить чтобы он рекурсия "влазела", но если вызов "зациклился" то это естественно не поможет


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
МММ
Дата 26.12.2002, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 18.6.2002

Репутация: нет
Всего: 1



все разобрался!!!!!!
вот так надо
Код

If (form1.Canvas.Pixels[x,y]<>clblack) and (form1.Canvas.Pixels[x,y]<>clred) then



--------------------
PM MAIL   Вверх
Step
Дата 26.12.2002, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: нет
Всего: 25



вообще надо помнить что при рекурсии надо очень четко определять процес выхода.


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0758 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.