Тема. Рекурсия.
Составить программу, используя рекурсивную процедуру (функцию).
Даны m натуральных чисел. Найти все их перестановки, причем в каждой перестановке не должно быть повторяющихся чисел. Для начала положить m=4.
Исходный код программы для Delphi 7:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var a,p : array[0..100] of integer;
n,i : integer;
procedure Permutations(n:integer);
procedure Perm(i:integer);
var j,k:integer;
begin
if i=n then
begin for j:=1 to n do write(a[p[j]],' '); writeln end
else
begin
for j:=i+1 to n do
begin
Perm(i+1);
k:=p[i]; p[i]:=p[j]; p[j]:=k
end;
Perm(i+1);
{циклический сдвиг элементов i..n влево}
k:=p[i];
for j:=i to n-1 do p[j]:=p[j+1];
p[n]:=k
end
end;{Perm}
begin {Permutations}
Perm(1)
end;
begin {Main}
Writeln('Vvedite kol-vo naturalnyh chisel:');
readln(n);
for i:=1 to n do p[i]:=i;
a:=p; {массив a может быть заполнен произвольно}
Permutations(n);
Readln;
end.
Блок схемы:
|