繁体   English   中英

在Java中递归查找ABC的组合

[英]Recursively finding combinations of ABC in Java

我正在尝试编写一个程序,以打印一个人可以用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");
}

如流氓所言,您的封锁:

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

您忘记了“递归案例”的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");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM