【发布时间】:2023-04-11 09:51:01
【问题描述】:
(--这个问题在下面得到了回答--)
大家好,所以我知道这个问题到目前为止已经在这个网站上以各种方式得到了回答,但我想看看我是否可以在没有得到直率答案的情况下得到我的问题的提示......对不起,如果这是多余的!
所以...到目前为止我的代码是这样的(正如函数所说,这应该打印出字符串“ABCD”的每个排列,并且必须递归地完成并且不使用 STL 算法):
void printPermutations(string prefix, string remainder)
{
if (remainder.empty())
cout<<prefix<<endl;
else {
for(int i = 0; i<remainder.length(); i++)
{
prefix += remainder[i];
remainder = (remainder.substr(0, i) + remainder.substr(i+1)); //Gets rid of selected char
printPermutations(prefix, remainder); //recursion w/updated values. Problem here?
}
}
}
其中余数 = "ABCD" 作为测试字符串。我假设我的问题出在递归调用本身?
到目前为止,该函数只打印出前 3 个排列:ABCD、ABDC、ACBD。我也有一种预感,这可能与 for 控制有关,因为它打印出 3 个排列,而 3 会小于字符串的长度 4?我不知道。我刚开始学习递归,我真的很难弄清楚如何正确地实现递归调用。
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。最后请学习如何edit您的问题,例如包含一个实际问题。您显示的代码有什么问题?您在哪些方面需要我们的帮助?
-
你想达到什么目的?如果这就是我认为我不确定它是否可以递归完成。
-
排列不需要递归,可以通过递归来组合。
-
@samthegolden 任何循环都可以递归完成,所以这可以通过递归来完成,但我不确定它是否有必要。
-
你是对的@john