program Rozklad; const MAX_N = 40; var scitance: array [1..MAX_N] of integer; { Globální pole, do kterého si rekurze připravuje sčítance. } { Rozloží číslo n na sčítance, mezi kterými jsou jen čísla od 1 do max. } { Číslo i představuje počet již hotových čísel v poli scitance. } procedure rozloz(n, i, max: integer); var j: integer; begin if n = 0 then begin { Máme připraveny všechny sčítance, vypíšeme je (konec rekurze). } for j := i downto 1 do begin if j < i then write('+'); write(scitance[j]); end; writeln; end else begin { Provedeme další krok rekurze. } if n < max then max := n; for j := 1 to max do begin scitance[i+1] := j; rozloz(n-j, i+1, j); end; end; end; var n: integer; begin read(n); rozloz(n, 0, n); end.