Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2014, 00:09   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Вызов процедуры из процедуры

Привет.

Код:

procedure testprocedure;
var
i:integer;
begin

For i:=0 to 10 do
 begin
  if i = 1 then
   begin
    testprocedure;
    break; ????????
   end;
 end;

end;
У меня возникла небольшая "непонятка", если я вызываю текущую процедуру из текущей процедуры, нужно ли мне останавливать цикл который работал в текущей процедуре после вызова текущей процедуры?

Капец скороговорка
bilibian вне форума Ответить с цитированием
Старый 18.07.2014, 00:44   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Пока не могу сообразить, но мне кажется будет зацикливание - бесконечная рекурсия.
И потом, вот это
Код:
For i:=0 to 10 do
 begin
  if i = 1 then
   begin
    testprocedure;
    break; ????????
   end;
 end;
равносильно этому :
Код:
For i:=0 to 1 do
 if i = 1 then testprocedure;
PS Кстати, переменные i в процедурах - это разные переменные. В каждый вызов будет создаваться своя i, и они никак не связаны с другими i, на других уровнях рекурсии.

Последний раз редактировалось type_Oleg; 18.07.2014 в 00:47.
type_Oleg вне форума Ответить с цитированием
Старый 18.07.2014, 01:20   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
мне кажется будет зацикливание - бесконечная рекурсия.
Именно она, родимая и любимая
northener вне форума Ответить с цитированием
Старый 18.07.2014, 01:24   #4
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Пока не могу сообразить, но мне кажется будет зацикливание - бесконечная рекурсия.
В данном примере да, но если изменить условие if, то я так не думаю.

То есть Break после вызова текущей процедуры из текущей процедуры нужно использовать, чтобы предыдущий уровень рекурсии дошел до своего логического завершения. Спасибо!

Последний раз редактировалось Stilet; 18.07.2014 в 08:10.
bilibian вне форума Ответить с цитированием
Старый 18.07.2014, 02:00   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
То есть Break после вызова текущей процедуры из текущей процедуры нужно использовать, чтобы предыдущий уровень рекурсии дошел до своего логического завершения. Спасибо!
Брейк ни коим образом не с связан с рекурсивным вызовом процедур. Он только лишь вызывает безусловное прекращение выполнения цикла.

Цитата:
Сообщение от bilibian Посмотреть сообщение
В данном примере да, но если изменить условие if, то я так не думаю.
Если изменить условие if так чтобы процедура не вызывалась из себя самой, то да. Но к чему/о чём тогда твой вопрос?

Последний раз редактировалось Stilet; 18.07.2014 в 08:11.
northener вне форума Ответить с цитированием
Старый 18.07.2014, 09:37   #6
kta87
Форумчанин
 
Аватар для kta87
 
Регистрация: 22.02.2010
Сообщений: 912
По умолчанию

bilibian, вам пример рукурсии нужны или бесконечных циклов? Вы бы описали задачу приближенно подробнее.
kta87 вне форума Ответить с цитированием
Старый 18.07.2014, 10:39   #7
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Привет.

Код:

procedure testprocedure;
var
i:integer;
begin

For i:=0 to 10 do
 begin
  if i = 1 then
   begin
    testprocedure;
    break; ????????
   end;
 end;

end;
У меня возникла небольшая "непонятка", если я вызываю текущую процедуру из текущей процедуры, нужно ли мне останавливать цикл который работал в текущей процедуре после вызова текущей процедуры?

Капец скороговорка
Ваш код идентичен нижеследующему
Код:

procedure testprocedure;
begin
  testprocedure;
end;
superedward вне форума Ответить с цитированием
Старый 18.07.2014, 10:50   #8
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
То есть Break после вызова текущей процедуры из текущей процедуры нужно использовать, чтобы предыдущий уровень рекурсии дошел до своего логического завершения. Спасибо!
При чем тут вообще предыдущий уровень? Он никак не связан с текущим, а break прервет цикл и ничего более.
Arigato вне форума Ответить с цитированием
Старый 18.07.2014, 11:27   #9
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Если я хочу начать следующий уровень рекурсии мне необходимо завершить предыдущий так? Для этого я использую Break, чтобы цикл после вызова процедуры остановился, а так как после цикла в коде ничего нет, то и предыдущий уровень рекурсии прекратит существование.

Код который я опубликовал в первом посте он для примера, в оригинале цикл проходит по списку TList и сверяет нужный текст, если совпадение найдено, то делаем рекурсию, то есть запускаем процедуру заново.
bilibian вне форума Ответить с цитированием
Старый 18.07.2014, 11:30   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Цитата:
Сообщение от bilibian Посмотреть сообщение
Для этого я использую Break
Почитайте, для чего используется break.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#, вызов процедуры nikitaivanov Помощь студентам 2 30.03.2013 19:58
Вызов процедуры Kashp Общие вопросы Delphi 4 31.03.2008 16:22
Вызов процедуры Stanislav Общие вопросы Delphi 9 22.11.2007 19:01
Вызов процедуры Илья Кибель Помощь студентам 7 17.09.2007 19:43
Вызов процедуры Monoflextor Общие вопросы Delphi 2 28.04.2007 17:32