在For循环中执行递归

时间:2015-09-30 06:06:55

标签: java string loops recursion permutation

我正在尝试理解为给定输入字符串编写排列的代码。

例如:输入字符串: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();
            }
        }

我对for 'i'在for循环中增加的时间感到非常困惑,即来自i=0 to 1. 我从第一次迭代中理解的一件事是'i'在达到基本情况时增加到1,即

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

我尝试进一步调试,对于连续迭代,我的值一直在0到1之间变化,我无法理解。

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

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

2 个答案:

答案 0 :(得分:2)

我尽量用图纸详细说明,希望它有用。 这个递归不需要try-catch块,你可以删除它,它可以正常工作

enter image description here

答案 1 :(得分:1)

它并不复杂:permuteString函数遍历endingString的所有字符,并将其添加到构造最终的字符串的末尾。 (并从endingString中删除该字符)在下一个permuteString调用中,它继续使用更大的startsString和更短的endingString。

这个递归实际上不需要try-catch块,你可以删除catch并且它将完全可用。