Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];

Вниз

Пример рекурсии   Найти похожие ветки 

 
ИМХО   (2003-12-04 08:41) [0]

Господа, поделитесь примером рекурсии (что-то я эту тему раньше незаслуженно обходил).

Ситуация: есть множество записей с полями ID, ParentID и Name. Нужно построить своего рода дерево.


 
Anatoly Podgoretsky   (2003-12-04 08:46) [1]

Рекурсия это очень простое явление, вот пример простой бесконечной рекурсии.

procedure F;
begin
F;
end;


 
Рамиль   (2003-12-04 08:58) [2]


> Anatoly Podgoretsky ©

Бесконечнвя рекурсия это хорошо, но желательно выход из нее предусмотреть все таки:)
пример:

function Factorial(n: integer): extended;
begin
if n > 0 then Result := n * Factorial(n-1)
else Result := 1;
end;


 
wal   (2003-12-04 09:14) [3]


> Ситуация: есть множество записей с полями ID, ParentID и
> Name. Нужно построить своего рода дерево.

Это не дерево, а однонаправленый список.

ЗЫ. Причем тут рекурсия?

С уважением.


 
Рамиль   (2003-12-04 09:20) [4]


> wal © (04.12.03 09:14) [3]


Если все это прописано в одной таблице, то не то что дерево, лес можно сделать.


 
Silver Alex   (2003-12-04 09:27) [5]

как именно хочешь строить, где, и по чем?
есть такой пример, но он только достает ID детей

function ChildsList(aConnection: TADOConnection;const aTableName,aKeyField,aParentField: String;
const StartID: Integer): String;
var
tmpStr,s: String;
begin
Result:= IntToStr(StartID);
with TADODataSet.create(nil) do
try
Connection:=aConnection;

s:="select * from "+aTableName + " where "+ aKeyField+"<>"+aParentField +
" and "+aParentField+"="+IntToStr(StartID);
CommandText:=s;
Open;
while not Eof do
begin
tmpStr:=ChildsList(aConnection, aTableName,
aKeyField,aParentField,fieldbyname(aKeyField).AsInteger);
if tmpStr<>EmptyStr then
Result:=Result+","+tmpStr;
Next;
end;
Close;
finally
Free;
end;
end;


 
Рамиль   (2003-12-04 09:38) [6]

function CreateTree(Id: integer);
var
IdArr: array of integer;
i: integer;
begin
DataSet.Close;
DataSet.CommandText := format("select * from TableName where ParentId = %s" [Id]);
DataSet.Open;
if DataSet.IsEmpty then exit;

{*здесь формирование вывода горизонтали или как там она называется, не помню*}

SetLength(IdArr, DataSet.Recordcount);
DataSet.First;
i := 0;
while not DataSet.Eof do
begin
IdArr[i] := DataSet["Id"];
inc(i);
end;
for i := 0 to High(IdArr) do
CreateTree(IdArr[i]);
IdArr := nil;
end


 
ИМХО   (2003-12-04 09:46) [7]

Удалено модератором


 
Skier   (2003-12-04 10:08) [8]

Хороший, а главное полезный пример рекурсии :
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=1015254946&n=19


 
Danilka   (2003-12-04 10:40) [9]

Приведу еще один пример рекурсии:
http://delphimaster.net/view/1-1070516482/

[7] ИМХО © (04.12.03 09:46)
Интересно, а что тебе не понравилось?
Ворос: "поделитесь примером рекурсии"
И первый и второй ответы - вполне нормальные и отвечают вопросу. В чем проблемы? В том что ты вопросы задавать не умеешь? Ну так обижайся сам на себя. :))


 
ИМХО   (2003-12-04 11:15) [10]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
6-52301
Vladimir Bolotin
2003-10-22 21:27
2003.12.16
поддержка нескольких протоколов (POP3, IMAP,...)


14-52345
electric
2003-11-23 15:02
2003.12.16
Не сохраняютса большие файлы


14-52335
тимеман
2003-11-23 12:07
2003.12.16
Часовые пояса.


1-52171
Temik
2003-12-03 15:52
2003.12.16
Есть ли в Delphi функция типа HexToStr ?


6-52300
VMS
2003-10-22 14:40
2003.12.16
INDY





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский