在 For 循环中执行递归

Performing Recursion inside For loop

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

例如:输入String: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' 在 for 循环中何时递增感到非常困惑,即从 i=0 to 1. 我从第一次迭代中了解到的一件事是 'i' 在达到基本情况时增加到 1,即

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

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

综上所述, 我对 "for loop" 与第一次迭代后 try 块中的两条指令之间的关系感到困惑。

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

没那么复杂:permuteString 函数遍历endingString 的所有字符,并将其添加到目前构建的开始字符串的末尾。 (并从 endingString 中删除该字符)在下一个 permuteString 调用中,它继续使用更大的 beginningString 和更短的 endingString。

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

我尽量用图详细说明了,希望对你有帮助。 这个递归不需要 try-catch 块,你可以删除它,它会工作得很好