����� �� �����.


������ ���������.

����������: ������������� � �������.

H��������� ��� ������������������ ����� N �� ����� 1,2,...,M.

First = (1,1,...,1) Last = (M,M,...,M)

���� ����� ������������������� ����� M^N (��������!). ����� ������. ��� ������ ����������� ��������� Next, ������ � ��������. ����� N=4,M=3. �����:

Next(1,1,1,1) -> (1,1,1,2) Next(1,1,1,3) -> (1,1,2,1) Next(3,1,3,3) -> (3,2,1,1)

������ ����� �������� ����� ��������� Next:

	 procedure Next;
	   begin
	     {����� i: X[i]<M,X[i+1]=M,...,X[N]=M};
	     X[i]:=X[i]+1;
	     X[i+1]:=...:=X[N]:=1
	   end;

��� ������ i ����� �� �������, �� ��������� ������������������ ��� - �� ��������� �� ��������� (M,M,...,M). ������� �����, ��� ���� �� ������� ������������������ ���� ����� �� �� 1 �� M, � �� 0 �� M-1, �� ������� � ��������� ������� �� ����������� 1 � M-����� ������� ���������. ������ ��������� �� ������� �������� ���:

    program Sequences;
      type Sequence=array [byte] of byte;
      var M,N,i:byte;
	  X:Sequence;
	  Yes:boolean;
      procedure Next(var X:Sequence;var Yes:boolean);
	var i:byte;
      begin
	i:=N;
	{����� i}
	while (i>0)and(X[i]=M) do begin X[i]:=1;dec(i) end;
	if i>0 then begin inc(X[i]);Yes:=true end
	else Yes:=false
      end;
    begin
      write('M,N=');readln(M,N);
      for i:=1 to N do X[i]:=1;
      repeat
	for i:=1 to N do write(X[i]);writeln;
	Next(X,Yes)
      until not Yes
    end.

������� ����� ��������.

������ ����������� ��������� Generate(k), ������������� ��� ������������������ ����� N �� ����� 1,...,M, � ������� ����������� ������ X[1],X[2],...,X[k]. �������, ��� ��� k=N �� ����� ����������� �������: ���� ������ ���� ����� ������������������ - ��� ��� ����.
��� k<N ����� ������� ������ � k+1:

	  procedure Generate(k:byte);
	    var i,j:byte;
	  begin
	    if k=N then
	      begin for i:=1 to N do write(X[i]);writeln end
	    else
	      for j:=1 to M do
		begin X[k+1]:=j; Generate(k+1) end
	  end;

������� ��������� ������ �������� ����� ������:

	program SequencesRecursion;
	  type Sequence=array [byte] of byte;
	  var M,N:byte;
	      X:Sequence;
	  procedure Generate(k:byte);
	       ............
	begin
	  write('M,N=');readln(M,N);
	  Generate(0)
	end.



����� �� ��������, � ���������� � ���������.

SpyLOG