这种迭代方法可以递归实现吗?

时间:2011-07-05 11:18:58

标签: java recursion

public class Main
{
    public static void pyr(int n)
    {      
        for(int i=1;i<=n;i++)
        {
             for(int j = 1;j<=i;j++)
             {  
                  System.out.print("*");
             }
             System.out.println();
        }
    }
 }

可以递归地实现像星号形状这样的金字塔代码吗?如果是这样的话,尤其是2个循环,第一个用于调平,而第二个用于填充每个级别。

3 个答案:

答案 0 :(得分:2)

答案是肯定的 - 基本上所有迭代都可以递归完成,有时候更容易,但更耗时。

对于你的问题 - 这就是诀窍:

public static void main(String[] args) 
{
    printPyramid(7);
}

public static void printPyramid(int lines)
{
    if (lines > 1)
    {
        printPyramid(lines-1);
    }
    printLine(lines);
    System.out.println("");
}

public static void printLine(int level)
{
    if (level > 0)
    {
        System.out.print("*");
        printLine(level-1);
    }
}

答案 1 :(得分:1)

  

“任何可以评估的函数   计算机可以用术语表达   没有使用的递归函数   迭代,继续传递   样式;相反,任何递归   功能可以表达为   迭代“。   资源:   http://kevin.vanzonneveld.net/techblog/tag/recursion/

编辑:添加了源链接。

答案 2 :(得分:0)

当然,请看一下wikipedia article的章节。我也见过数学证明,但我忘记了在哪里可以找到它。

在您的情况下,只需使用两种方法。只要输入参数大于0,就会打印星号。

public void static printStar(int n) {
  if(n > 0) {
      System.out.print("*");
      --n;
      printStar(n);
  }
}

此代码处理您的内部循环。

public void static printPyramid(int n, int start) {
  if(start >= n) {
    return;
  }

  printStar(start);
  ++start;
  printPyramid(n, start);
}

此代码处理您的外部循环。哪个开始是你的。