我设法用这样的循环打印金字塔:
void printtree() {
for (int i=0; i<row; i++){
for (int j=0; j<row-i-1; j++)
System.out.print(" ");
for (int k=row; k>row-i-1; k--)
System.out.print("* ");
System.out.println();
}
}
输出如下:
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
我想只使用递归,我应该如何构造函数?我关心的是嵌套循环,我只能解释单个内部或外部循环。我知道它被(行1)空格所依据,然后是行##&#34; *&#34;在每一行上,然后更改为新行。这里的基本案例是什么?
答案 0 :(得分:3)
因为您希望解决方案仅使用递归。我假设你不想在程序中有任何循环。如果您想快速将程序转换为递归方法,请查看每个for循环并思考如何转换它。
你可以转换
for (int j=0; j<row-i-1; j++)
System.out.print(" ");
运作
static void printSpace(int j, int i) {
if (j < row - i - 1) {
System.out.print(" ");
printSpace(j + 1, i);
}
}
请注意,上面的递归函数与for循环相同。它需要您在for循环中使用的相同参数。现在这个技巧你可以应用于for循环打印星形。
static void printStar(int k, int i) {
if (k > row - i - 1) {
System.out.print("* ");
printStar(k - 1, i);
}
}
类似的技巧可以应用于外部for循环,你可以转换代码。
完整代码
static int row = 5;
static void printtree() {
printPyramid(0);
}
static void printPyramid(int i) {
printSpace(0, i);
printStar(row, i);
System.out.println();
if (++i < row)
printPyramid(i);
}
static void printSpace(int j, int i) {
if (j < row - i - 1) {
System.out.print(" ");
printSpace(j + 1, i);
}
}
static void printStar(int k, int i) {
if (k > row - i - 1) {
System.out.print("* ");
printStar(k - 1, i);
}
}
答案 1 :(得分:-1)
static void recursion(int row, int k, int j)
{
if(row>10)
{
return;
}
else
{
if(k==row)
{
System.out.println();
recursion(++row, 0,0);
}
else if(10-j>row)
{
System.out.print(" ");
++j;
recursion(row, k, j);
}
else
{
System.out.print("* ");
recursion(row, ++k, j);
}
}
}
通话方法
recursion(0,0,0);