Целочисленное разбиение (алгоритм и рекурсия)
Нахождение сколько комбинаций суммы числа (переменная n в коде). Например:
3 = 1 + 1 + 1 = 2 + 1 = 3 => 3 года
5 = 5 = 4 + 1 = 3 + 2 = 3 + 1 + 1 = 2 + 2 + 1 = 2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 + 1 => ANS 7
В следующем примере, м максимальное число иn
это сумма, цель состоит в том, чтобы найти, сколько (сумма) комбинация имеет.
Я просто хочу знать, почему?p(n, m) = p(n, m - 1) + p(n - m, m)
Код здесь:
int p (int n, int m)
{
if (n == m)
return 1 + p(n, m - 1);
if (m == 0 || n < 0)
return 0;
if (n == 0 || m == 1)
return 1;
return p(n, m - 1) + p(n - m, m);
}
Оценил!