program decomp;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
mas: array[1..40] of byte;
N,sum,step: byte;
{-----------------------------------------------------------}
Procedure next(step,pred: byte);
var
i: byte;
begin
If sum=0 then begin
write(mas[1]);
for i:=2 to step-1 do
write('+','',mas);
If mas[1]>1 then
writeln;
mas[step-1]:=0;
end else
for i:=pred downto 1 do begin
If sum-i>=0 then begin
mas[step]:=i;
sum:=sum-i;
next(step+1,i);
sum:=sum+i;
end;
end;
end;
{-----------------------------------------------------------}
procedure file_read();
begin
assign(input,'decomp.in');
reset(input);
assign(output,'decomp.out');
rewrite(output);
end;
{-----------------------------------------------------------}
begin
file_read();
read(N);
sum:=N;
step:=1;
N:=N-1;
next(step,N);
end.
Золотая пирамида или пирамида Паскаля
1+1+1+1
1+1+2
1+3
2+2
На Delphi (консоль) программа использующая рекурсивную процедуру выглядит так: