递归地在Java中找到ABC的组合

时间:2014-04-18 19:52:27

标签: java recursion combinations

我试图编写一个程序来打印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");
}

2 个答案:

答案 0 :(得分:3)

正如流氓所提到的,你的阻止:

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

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

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

这可能会导致流量控制出错,因此导致StackOverflowError

添加括号以括起else语句:

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

答案 1 :(得分:0)

你忘记了"递归案例"的其他陈述的花括号。 ...

这确实有效:

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");
    }
}