Merci @Scotty, @paddy. Pour votre information, la solution est la suivante:Récursivité - sous-ensembles - C++
void RecSubsets(string soFar, string rest) {
if (rest == "") {
cout << soFar << end;
}
else {
RecSubsets(soFar + rest[0], rest.substr(1));
RecSubsets(soFar, rest.substr(1));
}
}
void CanMakeSum(string set) {
RecSubsets("", set);
}
J'écris un programme simple pour calculer toutes les combinaisons possibles dans un ensemble en divisant les données en 2 sets (C (n-1, k-1 & C (n-1, k)) et appelant la fonction récursivement. Voici ce que j'ai écrit:
void RecSubsets(string soFar, string rest) {
if (rest == "") cout << soFar << end;
}
else {
for (int i = 0; i < rest.length(); i++) {
string next = soFar + rest[i];
string remaining = rest.substr(i+1);
RecSubsets(next, remaining);
}
}
}
void CanMakeSum(string set) {
RecSubsets("", set);
RecSubsets("", set.substr(1));
}
int main() {
string set = "abcd";
CanMakeSum(set);
return 0;
}
Donc, pour une chaîne d'entrée « abcd », il serait divisé en 2 groupes (ABCD et abc), puis imprimer les combinaisons en appelant la fonction récursive. Sous cette logique, la sortie doit être: abcd, abc, abd, ab, acd, ac, ad, a ... Cependant, en utilisant le programme ci-dessus, la sortie est abcd, abd, acd, ad ... Je comprends conceptuellement ce que j'essaie de réaliser, mais j'ai du mal à le traduire en codes. Quelqu'un peut-il indiquer où je vais mal? Merci
Essayé traçage dans un débogueur? –