Есть задача найти слагаемые для определённой суммы.
Слагаемые заданны массивом.
Могут использоваться несколько раз.
Например:
Из слагаемых [1,2,6,10] нужно получить сумму 15
Ответом будет 10+2+2+1
Есть реализация для не повторяющихся слагаемых но это не то, что нужно:
function findSummand($sum, $parts, $depth = 0) {
static $args = array();
foreach ($parts as $k => $part)
{
if ($part == $sum)
{
$args[$depth] = $part;
return true;
}
if ($part < $sum)
{
$args[$depth] = $part;
if (findSummand($sum - $part, array_slice($parts, $k + 1), $depth + 1))
{
if ($depth == 0)
{
return $args;
}
return true;
}
}
}
if ($depth == 0) {
return 'Решение не найдено';
}
}