问个递归算法问题,简单(50分)

  • 主题发起人 主题发起人 tianzhen
  • 开始时间 开始时间
T

tianzhen

Unregistered / Unconfirmed
GUEST, unregistred user!
list1-listn,求包含每个list一个item的所有组合(list按1-n的顺序即可),说不清楚看例子:比如
有3个list分别有1、1、2个item,则所有组合为:
list1.item1+list2.item1+list3.item1,
list1.item1+list2.item1+list3.item2,
 
有几个list,进行几次嵌套循环就能实现,不过效率低点。
for i:=0 to list1.count
for j:=0 to list2.count
for m:=0 to list3.count
arrayvar[l]:=list1.items+list2.items[j]+list3.items[m];
inc(l)
end;
end;
end;
 
我也写了一个,不知道行不行,就是说个意思。

var List: TObejctList; //用来保存所有List的List

function TheFunctionYouWant(List: TObejctList; index: integer; text: string);
begin
for i := 0 to List[index].count - 1 do
begin
if index = List.Count - 1 then //如果到最后一个List则输出
Memo1.Lines.add(text + List[index].Item.TheString)
else
TheFunctionYouWant(List, index+1, text + List[index].Item.TheString);
end;
end;

TheFunctionYouWant(List, 0, ''); //调用
 
完美,这50分真是物超所值,可惜没有更多分了。
 
后退
顶部