![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Работаю с древовидными структурами данных. И вот пришла мысль, что для этих целей вроде бы хорошо использовать рекурсию (например, для навигации по данным). Но вот проблемка - я ни когда еще не использовал ее. Пожалста, подскажите в чем ее смысл.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| eof |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 30.5.2003 Репутация: нет Всего: нет |
процедура (функция) вызывает сама себя. например:
function GetAllChildCount(AItem: TTreeNode): Integer; begin Result := AItem.Count; for i := 0 to Result - 1 do Result := Result + GetAllChildCount(AItem.Item[i]); end; Примерно так может выглядеть рекурсивная функция для расчета количества всех "детей" узла дерева. надеюсь все правильно... |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Наглядный пример - удаление каталога со всем содержимым
http://www.delphimaster.ru/cgi-bin/faq.pl?...=988622376&n=15 |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
То, что помню из лекций...
1. Рекурсия не есть гуд... Но для обхода дерева - самое то... 2. Рекурсивная процедура обычно состоит из 2-х частей: а. Проверка некоего условия... б. Выполнение повторяющегося действия Например, если у тебя в дереве у каждого корня по 3 отростка, то поиск будет такой...
Если что непонятно будет, пиши... Это сообщение отредактировал(а) kesh - 10.6.2003, 08:58 -------------------- ![]() |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Печать ветви на принтер с помощью рекурсии:
Procedure PrintNode(Node: TTreeNode); Var t: Integer; Begin WriteLn(ff,StringOfChar(#9,Node.Level-Tree.Selected.Level)+Node.Text); With Tree Do For t:=0 to Node.Count-1 Do PrintNode(Node[t]); End; ... PrintNode(Tree.Selected); ... Ну то, что надо AssignPrn и т.д. делать, думаю, понятно. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Zzz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 21.2.2003 Где: Мурманск Репутация: нет Всего: 5 |
Все что тут написано - примеры прямой рекурсии. Есть еще косвенная. На псевдо языке выгдядит так:
Может такая форма рекурсии тебе пригодится тоже. Это сообщение отредактировал(а) Zzz - 10.6.2003, 16:31 -------------------- Бесполезной громоздкой надстройкой является Windows от Майкрософт. Она занимает 1Мб памяти диска и рассчитана на использование устройства типа мышь. "ЭВМ в инженерной практике" М. 1989г. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |