Der*_*ong 5 java recursion fractals
我有这个功课需要打印asterick画三角形.
当drawTriangle(0);
*
Run Code Online (Sandbox Code Playgroud)
当drawTriangle(1);
*
**
Run Code Online (Sandbox Code Playgroud)
当drawTriangle(2);
*
**
* *
****
Run Code Online (Sandbox Code Playgroud)
当drawTriangle(3);
*
**
* *
****
* *
** **
* * * *
********
Run Code Online (Sandbox Code Playgroud)
当drawTriangle(4);
*
**
* *
****
* *
** **
* * * *
********
* *
** **
* * * *
**** ****
* * * *
** ** ** **
* * * * * * * *
****************
Run Code Online (Sandbox Code Playgroud)
当drawTriangle(5);
*
**
* *
****
* *
** **
* * * *
********
* *
** **
* * * *
**** ****
* * * *
** ** ** **
* * * * * * * *
****************
* *
** **
* * * *
**** ****
* * * *
** ** ** **
* * * * * * * *
******** ********
* * * *
** ** ** **
* * * * * * * *
**** **** **** ****
* * * * * * * *
** ** ** ** ** ** ** **
* * * * * * * * * * * * * * * *
********************************
Run Code Online (Sandbox Code Playgroud)
任何建议将被认真考虑.干杯.
我确信您已经注意到三角形的高度是 2^n。所以您知道您需要打印那么多行。您还知道如果您要以某种方式复制它们,您需要记住以前的行,所以您知道您需要有地方来存储它们 - 也许是一个向量?
首先,创建向左倾斜的三角形而不是向右倾斜的三角形要容易一些。一旦你开始做某事,添加左侧填充使其向右倾斜就很容易做到。
从包含“*”的单行开始:打印它,并存储该字符串。
然后执行“n”次:
就是这样。只需在打印出来的所有内容的左侧添加空格即可使其向右倾斜。
(您可能会注意到,完成此操作后,您可以在其下面的循环内执行上面的第一步for。当您“使行成为正方形”时,您实际上只是计算出要添加到每行的空格数.只需在当前行的两个副本之间、打印输出和存储的新行中添加那么多空格,就可以节省打印[和存储]任何不必要的空格。)
这里有一些有用的字符串填充函数。通过在右侧添加空格padRight将字符串延长为字符宽。,你猜对了,会在左边添加空格:npadLeft
public static String padRight(String s, int n) {
return String.format("%1$-" + n + "s", s);
}
public static String padLeft(String s, int n) {
return String.format("%1$#" + n + "s", s);
}
Run Code Online (Sandbox Code Playgroud)
最后一个获得奖励积分的机会:您实际上不需要存储打印出来的后半行。