謝謝@Scotty,@paddy。僅供參考,最優解是這樣的:遞歸 - 子集 - 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);
}
我正在寫一個簡單的程序中,以計算所有可能組合的通過將數據分成2臺(C設置(N-1,K-1 )& C(n-1,k))並遞歸調用函數。 下面是我寫的東西:
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;
}
所以對「ABCD」的輸入字符串,它會分成2組(ABCD和ABC),然後通過遞歸調用函數打印出的組合。在這個邏輯下,輸出應該是:abcd,abc,abd,ab,acd,ac,ad,... 但是,使用上面的程序,輸出是abcd,abd,acd,ad ... 我在概念上理解我想要達到的目標,但難以將其轉化爲代碼。有人可以指出我要去哪裏嗎?謝謝
試圖在調試跟蹤呢? –