2015-09-30 208 views
3

我想了解给定输入字符串的写入排列代码。For循环执行递归

例如:输入字符串:123,输出:123,132,213,231,312,321。

下面的粘贴代码片段可以做到这一点。

public static void main(String args[]) { 

    permuteString("", "123"); 
    } 

public static void permuteString(String beginningString, String endingString) { 
    if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 
    else 
     for (int i = 0; i < endingString.length(); i++) { 
      try { 
       // System.out.println(i); 
       String newString = endingString.substring(0, i) + endingString.substring(i + 1); 
       permuteString(beginningString + endingString.charAt(i), newString); 
      } catch (StringIndexOutOfBoundsException exception) { 
       exception.printStackTrace(); 
      } 
     } 

我得到关于何时整数'i'在被递增循环,即从i=0 to 1. 一两件事,我从第一次迭代理解是'i'得到增加到1当它击中的基本情况,即

很迷茫
if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 

我试图进一步调试,我的价值保持在0和1之间的连续迭代,我不明白的变化。

总结, 我很困惑第一次迭代后"for loop"和try块中的两条指令之间的关系。

如果有人能指导我完成整个过程,我会很高兴。

回答

2

我试图尽可能详细地阐述绘画,希望它对我们有所帮助。 这个递归不需要try-catch块,你可以删除它,它会工作得很好

enter image description here

1

它并不那么复杂:permuteString函数遍历endingString的所有字符,并将其添加到构造好的开始字符串的末尾。 (并从endingString中移除该字符)在下一个permuteString调用中,它继续使用更大的beginningString和更短的endingString进行工作。

这个递归并不是真的需要一个try-catch块,你可以删除catch并且它将完全可用。