Java 方法递归与置换

Java 方法递归与置换,java,recursion,Java,Recursion,我试图理解下面写的代码。我可以跟进到某一点。我想我理解第一个结果是如何实现的,但不确定其他结果是如何实现的。下面是代码和我的解释 代码: publicstaticvoidmain(字符串[]args) { String str=“abc”; 置换(str,“”); } 专用静态无效置换(字符串str、字符串current){ if(str.equals(“”) { System.out.printf(“结果:%s”,当前); System.out.println(); } 其他的 { 对于(in

我试图理解下面写的代码。我可以跟进到某一点。我想我理解第一个结果是如何实现的,但不确定其他结果是如何实现的。下面是代码和我的解释

代码:

publicstaticvoidmain(字符串[]args)
{
String str=“abc”;
置换(str,“”);
}
专用静态无效置换(字符串str、字符串current){
if(str.equals(“”)
{
System.out.printf(“结果:%s”,当前);
System.out.println();
}
其他的
{
对于(int i=0;i
我对字符串的解释,如abc

1.对于i=0;i<字符串长度;增量i

2.at索引i转换为字符(a)

3.使用子字符串(剩余字符-bc)和(当前字符a)的参数运行置换方法

4.现在使用字符串bc

5.对于i=0;i<字符串长度;增量i

6.at索引i转换为字符(b)

7.使用子字符串(剩余字符-c)和(当前字符ab)的参数运行置换方法

8.对于i=0;i<字符串长度;增量i

9.at索引i转换为字符(b)

10.使用子字符串(剩余字符-)和(当前字符abc)的参数运行置换方法

11 as string=“”打印当前字符abc


其他排列是如何实现的?任何指导都将不胜感激。

我建议您使用调试器,一次一行地遍历代码,并观察变量值的变化。如果您发现一些您不理解的更具体的内容,请带着更多的问题回来!搜索不会有任何伤害。不,真的!它会是通过递归进行的置换。这里有更好的解释:
public static void main(String [] args)
{
    String str ="abc";
    permuatation(str,"");
}

private static void permuatation(String str, String current) {
    if(str.equals(""))
    {
        System.out.printf("Result: %s",current);
        System.out.println();
    }
    else
    {
        for (int i = 0; i < str.length(); i++)
        {
            char c= str.charAt(i);
            permuatation(str.substring(0, i)+ str.substring(i+1), current + c);

        }
    }