void arrsum(int* arr, int n, int sum, std::vector<std::vector<int> >& _vecsum)
{
static std::vector<int> _vec;
if (0 == sum)
{
_vecsum.push_back(_vec);
}
else if (n > 0 && sum > 0)
{
if (sum >= *arr)
{
_vec.push_back(*arr);
arrsum(arr + 1, n - 1, sum - *arr, _vecsum);
//arrsum(arr, n, sum - *arr, _vecsum);//一个元素值可以多次试用
_vec.pop_back();
}
arrsum(arr + 1, n - 1, sum, _vecsum);
}
}
int main(int argc, char* argv[])
{
std::vector<std::vector<int> > vec;
int arr[] = { 2,4,3,5,8 };
arrsum(arr, sizeof(arr) / sizeof(int), 10, vec);
return 0;
}