このコードは、スタンフォード大学の CS106B クラスの教科書の再帰の章から読みました。この再帰関数はループを使用します。分解は再帰呼び出しの間で発生し、ループはさまざまな組み合わせを試みるだけですが、この関数は依然として再帰の定義を修飾していますか?
出力の概要: 「ABC」 --> 「ACB」、「BCA」など、セット内の文字列の順列を生成するコード。
Set<string> generatePermutations(string str) {
Set<string> result;
if (str == "") {
result += "";
} else {
for (int i = 0; i < str.length(); i++) {
char ch = str[i];
string rest = str.substr(0, i) + str.substr(i + 1);
for (string s : generatePermutations(rest)) {
result += ch + s;
}
}
}
return result;
}