-2

このコードは、スタンフォード大学の 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;
}
4

2 に答える 2