초보라서 여쭤요.
Treenode를 사용할 경우 재귀호출을 사용하는 경우가 많지요?
재귀호출을 사용하는 경우와 For문을 사용하는 경우
어느쪽이 어떤이득이과 불이익이 있을까요?
// 재귀를 사용하는 경우
function recursive(tn:TTreeNode):string;
var i:integer;
begin
if tn.items.count>0 then
for i:=0 to tn.items.count-1 do
recursive(tn.item[i]);
else
result:=tn.text;
end;
// For문을 사용하는 경우
for i:=0 to treeview1.items.count-1 do
str:=str+treeview1.items[i].text;
TreeNode를 사용하신다니..
그 용도에 따라서, 어떤 불이익이나 이익을 따지긴 그렇군요..
TreeNode를 사용하는 목적에 따라서 대부분
그 이익이 결정되지만,
TreeNode의 "Depth*Terminal Node수"로 계산해서..
Memory Overflow를 발생시키지 않는 한도내에서는
속도상에는 큰 불이익은 나타나지 않습니다..
단지, Depth*Terminal Node수가 너무 많다면,
문제가 되겠습니다..
이때는 귀찮더라도 루프문(델파이에서는 for 루프문이 제일빠름)을
사용하는 방법을 써야되겠습니다..
간단한 예로,
어떤 회사에서 부서를 TreeNode로 구현한다면,
당연히, 재귀함수를 사용하겠지요..
그렇지 않고,
아주 큰 회사에서 사용하는 ERP의 생산부분을 예로 들면,
각 공정별 어떤 연결성을 가지게끔 DB를 Tree구조로 편성할 수 있습니다.
이것은 많으면, 몇개의 연결성을 가지거나, 수백개의 연결성 혹은
중복적인 연결성등을 가질 수 있습니다..
따라서, 이때는 For문같은 것을 사용할 수 있겠지만,
자료구조론을 보신분들은 곧바로 아시겠지만,
좀 귀찮습니다..
글거적 대는 것도 많구요..
따라서, 속도상의 큰 하자가 없다면,
대부분 재귀호출을 선호하는 편입니다..
즉, 속도차이가 나 봤자, DB를 이용하지 않는다면,
대부분 2초이내에 끝나게 될 것이므로,
귀찮은 for문 같은것은 사양하게 될 것입니다..
이런 이론적인 견해는
답이라기보다는 주관적 견해가 많이 들어가겠군요..
답은 아니지만,
업무를 추진하고, Treenode를 수없이 만들어봤던,
그런 놈이 한번 끌거적 해 봤습니다..