我需要打印一个三角形及其倒三角形(站在它的尖端)。我设法只打印出三角形。我知道我可以很容易地使用循环,但我想知道如何使用递归,在我的情况下,我不知道如何打印三角形和倒置三角形。谢谢。
Example desired output:
*
**
***
****
****
***
**
*
我的代码:
public class Recursion1 {
public static void main(String[] args) {
Recursion1 me = new Recursion1();
me.doIt();
}
public void doIt() {
nums(4);
}
public String nums(int counts) {
if (counts <= 0) {
return "";
}
String p = nums(counts - 1);
p = p +"*";
System.out.print(p);
System.out.println();
return p;
}
}
我的结果:
Results:
*
**
***
****
答案 0 :(得分:1)
你必须重新考虑这个问题,这可能是一个可能的解决方案:
public class Recursion1 {
private static int endValue;
private static int startValue = 1 ;
public Recursion1(int endValue){
Recursion1.endValue = endValue;
}
public static void main(String[] args) {
Recursion1 me = new Recursion1(4);
me.doIt();
}
public void doIt() {
nums("*");
}
public String nums(String value) {
if( startValue == endValue){
System.out.println(value);
}else{
System.out.println(value);
startValue ++;
value = value.concat("*");
nums(value);
value = value.substring(1);
System.out.println(value);
}
return value;
}}
答案 1 :(得分:0)
我建议将结果String
的创建与打印分开。这样你就可以用结果做任何你想做的事情,而且它可能更有效率。同样为了提高效率,建议使用StringBuilder
,因为它可以避免创建和丢弃许多String
个对象。另外,为了提高效率,请使用单个字符添加单个char
而不是String
。
这是一个解决这些问题的解决方案。您将初始计数为零,行数和新StringBuilder
作为参数传递。附加的*
个数增加到行数的一半然后减少。每个递归调用都会附加新行。
public void doIt() {
String p = nums(0, 7, new StringBuilder());
System.out.print(p);
}
public String nums(int counts, int lines, StringBuilder b) {
if (counts == lines)
return b.toString();
int size = counts < lines / 2 ?
counts :
lines - counts - 1;
for (int i = 0; i < size + 1; ++i)
b.append('*');
b.append('\n');
return nums(counts + 1, lines, b);
}