2014-10-14 6 views
0

В настоящее время у меня есть следующий рекурсивный алгоритм для решения проблемы суммирования подмножества. Он проверяет, согласуется ли какая-либо комбинация элементов в заданном векторе с целевым номером. Например, если A= {1,2,3,4,5} и target = 8, то он должен вернуть true как 1+2+5=8. В настоящее время он работает отлично. Однако я хочу сделать одно изменение. Я назначаю значения одному из параметров функции в моей основной, и я стараюсь этого не делать. Все, что я хочу сделать, это вызвать функцию в моем главном. Не знаю, как я попытаюсь это сделать. Любая помощь приветствуется!Изменение рекурсивного алгоритма подмножества сумм

bool subsetsum_imp(vector<int> & vec, int n, int sum) { 

    if (sum == 0) { 
     return true; 
    } 

    if (n == 0 && sum != 0) { 
     return false; 
    } 

    if (vec[n-1] > sum)  
     return subsetsum_imp(vec, n-1, sum); 

    return subsetsum_imp(vec, n-1, sum) || subsetsum_imp(vec, n-1, sum-vec[n-1]); 
} 

Значение п назначается в мой основной следующим образом или иначе алгоритм не работает, как я могу включить это в моей функции как-то так я не должен писать в мой главный?

int n = sizeof(vec)/sizeof(vec[0]); 
+0

Почему бы не использовать vec.size()? – SHR

+0

@SHR Это полностью заставило меня использовать vec.size(), но будет ли это иметь значение? – sparta93

ответ

2

Используйте функцию обертки, которая вызывает рекурсивную функцию. Что-то вроде:

bool subsetsum(vector<int> & vec, int sum) 
{ 
    return subsetsum_imp(vec, vec.size(), sum); 
} 
Смежные вопросы