打印金字塔使用递归仅
问题描述:
我设法打印金字塔这样的循环:打印金字塔使用递归仅
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)空格和行号“*”的行解释的,然后换成新行。这里的基本情况是什么?
答
既然你想解决方案只使用递归。我假设你不想在程序中产生任何循环。如果您想快速将程序转换为递归方法,请查看每个循环并考虑如何转换它。
您可以转换
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);
}
}
类似的技巧可以应用于outer 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);
}
}
答
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);
+0
Downvote,因为这里没有解释;它只是一个代码转储。 – Carcigenicate
想象一下:为了与K空间的偏移量,应先打印N-1星打印的最后N个明星具有K + 1个空格的偏移量。 –
你看过递归吗?如果是这样,你有没有尝试过自己实现呢?当然,如果你不做任何研究,你会遇到困难。如果您已经尝试过,但无法让您的实施工作,请发布您的尝试 –