gpt4 book ai didi

java - 使用递归制作星条旗图案

转载 作者:行者123 更新时间:2023-11-30 05:39:57 29 4
gpt4 key购买 nike

void printPattern(int n)

说明:打印 n+1 行(0 到 n)的图案:第 i 行(i = 0 到 n)有 i 个星星(“*”),后跟 (n-i) 个条纹(“-”)例如, printPattern(3) 打印:

---
*--
**-
***

我认为我需要使用辅助方法来执行此操作,但我对递归很陌生,并且无法找到执行此操作的方法。有人尝试过吗?

我用它作为我的辅助方法。我收到堆栈溢出错误,并且也无法打印任何 -

private void printPattern(int stars, int stripes) {

if (stars == 1) {
stars--;
System.out.println("*");
}
else if (stars > 1) {
stars--;
System.out.println("*");
}
if (stripes == 1) {
stripes--;
System.out.println("-");
}
else if (stripes > 1) {
stripes -= 1;
System.out.println("-");
}
printPattern(stars,stripes);

最佳答案

是否需要递归解决方案?

如果不是,我会给您一个示例,说明如何仅使用 for 循环来做到这一点。

void printPattern(int n){
for (int i = 0; i < n + 1; i++) {
int stripes = n - i;
int stars = i;

StringBuilder accumulator = new StringBuilder();
for (int j = 0; j < stars; j++) {
accumulator.append("*");
}

for (int j = 0; j < stripes; j++) {
accumulator.append("-");
}

System.out.println(accumulator.toString());
}
}

您可以通过使用辅助方法来获取星条旗字符串来改进此代码,而不是使用如下方法签名重复循环:generateSymbolString(int RepeatCount, String symbol)

我尝试在接口(interface) void printPattern(int n) 中使用递归,但没有得到解决此问题的良好答案。

无论如何,堆栈溢出错误的问题是因为您没有在方法中定义基本情况,因此该方法会生成无限的 self 调用。要解决堆栈溢出错误,您可以这样做:

private static void printPattern(int stars, int stripes) {
if (stars == 1) {
stars--;
System.out.println("*");
} else if (stars > 1) {
stars--;
System.out.println("*");
}
if (stripes == 1) {
stripes--;
System.out.println("-");
} else if (stripes > 1) {
stripes -= 1;
System.out.println("-");
}

//base case to exit recursion because is the last print
if (stripes != 0) {
printPattern(stars, stripes);
}

}

关于java - 使用递归制作星条旗图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55858822/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com