Плиииизззз... с помощью рекурсии Дано натуральное число N. Требуется получить и вывести на экран все возможные различные способы представления этого числа в виде суммы натуральных чисел (то есть, 1 + 2 и 2 + 1 – это один и тот ...

Плиииизззз... с помощью рекурсии Дано натуральное число N. Требуется получить и вывести на экран все возможные различные способы представления этого числа в виде суммы натуральных чисел (то есть, 1 + 2 и 2 + 1 – это один и тот же способ разложения числа 3). Решите задачу с помощью рекурсив-ной процедуры. Пример: Введите натуральное число: 4 1 + 1 + 1 + 1 1 + 1 + 2 1 + 3 2 + 2
Гость
Ответ(ы) на вопрос:
Гость
var   n: integer;   a: array[1..100] of integer; procedure gen(pos, prev, sum: integer); var i: integer; begin   if sum > 0 then   for i := prev to sum do   begin     a[pos] := i;     gen(pos + 1, i, sum - i);   end   else if a[1] < n then   begin     write(a[1]);     for i := 2 to pos - 1 do write(' + ', a[i]);     writeln;   end; end; begin   read(n);   gen(1, 1, n); end.
Гость
//PascalABC.NET 3.1 сборка 1200 procedure Decomposition(depth, previous, rest: integer; a: string); begin   if rest < 0 then     exit;     if (rest = 0) and a.Contains('+') then begin     Println(a);     exit;   end;     for var i := previous to rest do     Decomposition(depth + 1, i, rest - i,       (a = '') ? i.ToString() : a + ' + ' + i.ToString()); end; begin   Decomposition(1, 1, ReadInteger('n ='), ''); end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы