所以我读过你可以将任何循环转换为递归函数,我想知道如何将下面的代码(打印出字符串的排列)变成一个(用以下代码替换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));
}
}
谢谢大家!
答案 0 :(得分:1)
如果你不想改变合约,你可以通过帮助来实现。
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
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);
}
}
答案 1 :(得分:0)
添加参数以表示下限和上限
private static void permutation(String prefix, String str, int i, int j) {
在排列开始时添加边界条件,
if(i < j){
然后省略for
循环,并在你已经递归的排列调用中,
permutation(..., i+1, j);
最后,当你最初从其他代码调用它时,传递0并将参数str的长度()作为i和j的值。
你还可以创建另一个置换(...)重载,它带有两个额外的参数,所以你的初始调用不必解决它们。
请注意,您可以删除代码中n
周围的部分冗余,但是可以在不执行此操作的情况下解决此问题。