-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

7

是的,一个调用自己的方法就是递归的定义

于 2013-06-07T20:06:02.877 回答
3

是的,它是递归。它只是朴素算法到编程语言的翻译,对于长度为 n 的排列,最朴素的算法是从集合中固定一个元素并排列其余 (n-1) 个元素。所以是的,算法是递归的,它的实现也是。

于 2013-06-07T20:04:53.687 回答