【问题标题】:Recursively finding combinations of ABC in Java在Java中递归查找ABC的组合
【发布时间】:2014-04-19 04:01:27
【问题描述】:

我正在尝试编写一个程序来打印可以使用 ABC 制作的所有模式。 我允许用户确定它的字符应该多长,但是我在运行程序时遇到了问题,因为我收到一个错误并且我不知道出了什么问题..

private static int userinput;

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);

    System.out.println("Enter the maximum number of characters");
    userinput = input.nextInt();
    combos();
}

public static void combos()
{
    combos("");
}

private static void combos(String counter)
{
    if (counter.length() == userinput) //base case
        System.out.println(counter);
    else //recursive case
        combos(counter + "A");
        combos(counter + "B");
        combos(counter + "C");
}

【问题讨论】:

  • @John 异常在 java.lang.StringBuilder.append(Unknown Source) at java.lang.StringBuilder.(Unknown Source) 处的线程“main”java.lang.StackOverflowError

标签: java recursion combinations


【解决方案1】:

正如流氓所说,你的障碍:

else //recursive case
    combos(counter + "A");
    combos(counter + "B");
    combos(counter + "C");

... 只会在else 语句的上下文中执行combos(counter + "A");

无论您的if 条件如何,都将执行以下递归语句(“B”和“C”)。

这可能会导致您的流量控制出现故障,因此您的StackOverflowError

添加括号将您的else 声明括起来:

else {//recursive case
        combos(counter + "A");
        combos(counter + "B");
        combos(counter + "C");
}

【讨论】:

  • 这不只是可能.. :)
  • 谢谢,我忽略了我没有加括号!
【解决方案2】:

您忘记了“递归案例”的 else 语句的花括号 ...

这确实有效:

private static void combos(String counter) {
    if (counter.length() == userinput) //base case
        System.out.println(counter);
    else {
        combos(counter + "A");
        combos(counter + "B");
        combos(counter + "C");
    }
}

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多