Предполагая, что перевод в c правильный, вы выводите только подмножество в предложении
if(par_sum == reqvalue)
print(partial);
Следовательно, вы можете напечатать только первое, которое вы можете вернуть в конце этого предложения, и убедитесь, что что for
l oop также ломается, например, с помощью кода возврата subset
(например, изменив его на int
), например:
#define BREAK_LOOP 1 // before subset
int subset(int *nos,int *partial,int reqvalue,int maxvalue)
{
...
Изменить вывод условие для возврата BREAK_LOOP
и возврата 0 в другом случае:
if(par_sum == reqvalue)
{
print(partial);
return BREAK_LOOP;
}
if(par_sum > reqvalue)
return 0;
Измените для l oop, чтобы проверить subset
возвращаемое значение, и верните 0 в противном случае.
int subset_ret_val = 0;
for(int j =0; j < count; j++)
{
...
subset_ret_val = subset(remaining,partial,reqvalue,maxvalue);
if (subset_ret_val)
return subset_ret_val;
top--;
}
return 0;
Если вы можете / не можете изменить тип возвращаемого значения функции на int
, вы можете эквивалентно передать другой аргумент-указатель. Если вы вообще не можете изменить сигнатуру функции, вы все равно, возможно, совершите некоторый хак, злоупотребляя существующими аргументами, но вы, похоже, не запрашивали решения для этого.