我在递归章节中阅读了斯坦福 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;
}