递归问题
我的代码应该用3调用时打印下面的输出,但是每次运行它时它都会打印2行null。递归问题
---
*--
**-
***
每当我尝试改变某些东西时,它会在运行时出现堆栈溢出错误。我知道如何修复这个输出,但不能递归。我们不允许使用任何循环,这是我遇到问题的地方。任何帮助将非常感激。
public void printPattern(int n) {
if(n>0){
System.out.println(printPatternStripes(n));
printPatternStripes(n-1);
System.out.println(printPatternStars(n));
printPatternStars(n+1);
}
}
private String printPatternStars(int stars){
if(stars==0){
return printPatternStars(stars+1) + "*";
}
else{
return null;
}}
private String printPatternStripes(int stripes){
if(stripes!=0){
return printPatternStripes(stripes-1)+ "_";
}
else{
return null;
}}
因为你被允许使用的辅助方法,那么像这样的工作:
public void printPattern(int n) {
printHelper(n, n);
}
public void printHelper(int n, int initialSize) {
if(n > 0) {
printHelper(n - 1, initialSize);
}
System.out.print(stringHelper("*", n));
System.out.println(stringHelper("-", initialSize - n));
}
public String stringHelper(String string, int length) {
if (length == 0) {
return "";
}
if (string.length() == length) {
return string;
}
return stringHelper(string + string.charAt(0), length);
}
用法:
printPattern(3);
>> ---
*--
**-
***
我无法更改参数,但我可以使用助手方法 –
@ J.Doe确保您的教师认为使用'Collections.nCopies'即可。如果他们希望你使用递归来生成恒星的子串和破折号的子串,就像你试图在你的问题中做的那样,他们可能会考虑使用这样的库方法来作弊。如果你不能使用它们,你仍然可以编写你自己的递归帮助器方法,它和'String.join(“,Collections.nCopies(n,”*“))''一样。 – ajb
我不确定它是否会导致问题。是否有一种简单的方式来执行打印语句? –
一个问题是,而不是return null;
,你应该return "";
两个else语句。
现在它只是返回一条实线 –
如果(!星星= 0)返回空值,如果(条纹!= 0)你返回null。这造成了很多问题。 –
必须是[同学](http://stackoverflow.com/q/43434546/2970947)。 –
它应该以下划线开头并用*一行替换它,直到它碰到基本情况 –