Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на слагаемые - C#
Формулировка задачи:
Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на слагаемые (без повторений). Например, для n=5 на экран должно быть выведено:
1+1+1+1+1=5
1+1+1+2=5
1+1+3=5
1+4=5
2+1+2=5
2+3=5
Решение задачи: «Разработать рекурсивный метод для вывода на экран всех возможных разложений натурального числа n на слагаемые»
textual
Листинг программы
using System;
using System.Collections.Generic;
class Program
{
private static IEnumerable<IEnumerable<int>> Addends(int n, Stack<int> addends)
{
if (n == 0) yield return addends;
for (int i = addends.Count == 0 ? 1 : addends.Peek(); i <= n; ++i)
{
addends.Push(i);
foreach (var j in Addends(n - i, addends)) yield return j;
addends.Pop();
}
}
public static void Main()
{
foreach (var addends in Addends(5, new Stack<int>()))
{
Console.WriteLine(String.Join(" + ", addends));
}
}
}