因此,我读到可以将任何循环转换为递归函数,我想知道如何将下面的代码(打印字符串的排列)转换为一个(用递归函数替换for循环)。我要求的不是解决方案,而是一种处理这样一项任务的思维方式。谢谢!
private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0) System.out.println(prefix);
else {
for (int i = 0; i < n; i++)
permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
}
}谢谢大家!
发布于 2016-03-23 04:40:17
如果你不想改变合同,你可以通过做一个帮手来做。
private static void permutationFor(int i, int n, String prefix, String str) {
if( i < n ) {
permutation(prefix + str.charAt(i),
str.substring(0, i) + str.substring(i+1, n));
permutationFor(i+1, n, prefix, str);
}
}因此,您可以通过调用permututaionFor来更改for循环
private static void permutation(String prefix, String str) {
int n = str.length();
if (n == 0) {
System.out.println(prefix);
} else {
premutationFor(0, n, prefix, str);
}
}发布于 2016-03-23 04:35:52
添加参数来表示下界和上界,
private static void permutation(String prefix, String str, int i, int j) {在排列的开始处添加边界条件,
if(i < j){然后省略for循环,并在已经递归的置换调用中,
permutation(..., i+1, j);最后,当您最初从其他代码调用它时,传递0和参数str的.length()作为i和j的值。
您还可以创建另一个排列(...)重载,它接受两个额外的参数,这样你的初始调用就不必弄清楚它们。
请注意,您可以在代码中删除n周围的一些冗余,但您可以在不这样做的情况下使其正常工作。
https://stackoverflow.com/questions/36164129
复制相似问题