| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Рекурсия |
| Автор: <Spawn> 9.6.2003, 13:56 |
| Работаю с древовидными структурами данных. И вот пришла мысль, что для этих целей вроде бы хорошо использовать рекурсию (например, для навигации по данным). Но вот проблемка - я ни когда еще не использовал ее. Пожалста, подскажите в чем ее смысл. |
| Автор: eof 9.6.2003, 14:20 |
| процедура (функция) вызывает сама себя. например: function GetAllChildCount(AItem: TTreeNode): Integer; begin Result := AItem.Count; for i := 0 to Result - 1 do Result := Result + GetAllChildCount(AItem.Item[i]); end; Примерно так может выглядеть рекурсивная функция для расчета количества всех "детей" узла дерева. надеюсь все правильно... |
| Автор: dm9 9.6.2003, 15:42 |
| Наглядный пример - удаление каталога со всем содержимым http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622376&n=15 |
| Автор: Kesh 10.6.2003, 08:56 | ||
| То, что помню из лекций... 1. Рекурсия не есть гуд... Но для обхода дерева - самое то... 2. Рекурсивная процедура обычно состоит из 2-х частей: а. Проверка некоего условия... б. Выполнение повторяющегося действия Например, если у тебя в дереве у каждого корня по 3 отростка, то поиск будет такой...
Если что непонятно будет, пиши... |
| Автор: Song 10.6.2003, 14:01 |
| Печать ветви на принтер с помощью рекурсии: 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 10.6.2003, 16:30 | ||
Все что тут написано - примеры прямой рекурсии. Есть еще косвенная. На псевдо языке выгдядит так:
Может такая форма рекурсии тебе пригодится тоже. |