procedure Generate(A: array of integer; i: integer; Subset: sequence of integer);
begin
if i = A.Length then
Subset.Println
else
begin
Generate(A,i+1,Subset); // не добавлять
Subset := Subset + A[i];
Generate(A,i+1,Subset); // добавить
end;
end;
begin
var A := Arr(5,3,8,13,15);
var Subset := Seq&<integer>();
Generate(A,0,Subset);
end.
Я остановился на таком варианте. Буду рассказывать его на лекции:
procedure Generate(A: array of integer; i: integer; Subset: LinkedList<integer>);
begin
if i = A.Length then
Subset.Println
else
begin
Generate(A,i+1,Subset); // не добавлять
Subset.AddLast(A[i]);
Generate(A,i+1,Subset); // добавить
Subset.RemoveLast;
end;
end;
begin
var A := Arr(5,3,8);
var Subset := new LinkedList<integer>;
Generate(A,0,Subset);
end.