[英]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.