【问题标题】:Performing Recursion inside For loop在 For 循环中执行递归
【发布时间】:2015-12-27 19:36:52
【问题描述】:

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

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

下面粘贴的代码 sn-p 就是这样做的。

 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块中的两条指令之间的关系感到困惑。

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

【问题讨论】:

    标签: java string loops recursion permutation


    【解决方案1】:

    我试着用一张图尽可能详细地阐述我希望它会有所帮助。 此递归不需要 try-catch 块,您可以将其删除,它会正常工作

    【讨论】:

      【解决方案2】:

      这并不复杂:permuteString 函数遍历了所有的endingString 字符,并将其添加到目前构造的起始字符串的末尾。 (并从结尾字符串中删除该字符)在下一个 permuteString 调用中,它使用更大的开头字符串和更短的结尾字符串继续工作。

      这种递归实际上并不需要 try-catch 块,您可以移除 catch 并且它会完全正常运行。

      【讨论】:

        猜你喜欢
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多