打印金字塔使用递归仅

打印金字塔使用递归仅

问题描述:

我设法打印金字塔这样的循环:打印金字塔使用递归仅

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)空格和行号“*”的行解释的,然后换成新行。这里的基本情况是什么?

+0

想象一下:为了与K空间的偏移量,应先打印N-1星打印的最后N个明星具有K + 1个空格的偏移量。 –

+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