for idx:=bloc to eloc do
begin
gidx[selcnt+eloc-total]:=idx; // 注意此处应与下面 8888处一致
tmpstr:='';
for jjj:=1 to selcnt do tmpstr:=tmpstr+inttostr(value[gidx[jjj]])+' ';
form1.memo1.lines.add(tmpstr);
end;
end
else begin
for idx:=bloc to eloc do
begin
gidx[selcnt+eloc-total]:=idx; // 8888
myrecur(total,selcnt,idx+1,eloc+1);
end;
end;
end;
procedure selnumber(total,selcnt:integer);
begin
if (total<1) or (total<selcnt)
then begin
showmessage('数据不正确!');
exit;
end;
myrecur(total,selcnt,1,total-selcnt+1); // 最初第三个参数总为1
end;
使用:
procedure tform1.button3click(sender: tobject);
var
ttl,sel:integer;
begin
memo1.clear;
ttl:=strtoint(edit1.text); // 请自己加上对tedit的容错处理。
sel:=strtoint(edit2.text);
selnumber(ttl,sel);
end;
好了,在edit1中输入‘100’,在edit2中输入'3',执行试试,三十多万行的数据不断地滚出来了吧。