打印星形图案而不使用仅使用单个循环的递归?

时间:2016-06-01 10:14:45

标签: java

我做了一个程序

public class StarPattern2 {

    public static void main(String args[]) {
        printStar("*", 1, 5);
    }

    public static void printStar(String s, int i, int a) {
        if (a == 0)
            return;
        for (int j = 0; j < i; j++) {
            System.out.print(s);
        }
        System.out.println();
        a--;
        i++;
        printStar("*", i, a);
    }

}

将图案打印为

*
**
***
****
*****

但它使用一个循环我不想使用任何循环,即仅使用递归我想要打印模式。

3 个答案:

答案 0 :(得分:1)

要删除递归,请将printStar替换为:

public static void  printStar(String s, int i, int a)
{
   for(;a>0;a--)
   {
     for(int j=0;j<i;j++)
     {
      System.out.print(s);
     }
     System.out.println();

     i++;
   }
}

对于递归的要求,OR循环:

public static void  printStar(String s, int i, int a)
{
    if(a == 0) return;

    System.out.println(s);

    printStar(s+"*", i, a-1);
}

请注意,i变量不再需要。

答案 1 :(得分:0)

你可能会这样:

public class App {

    public static void main(String[] args) {
        App app = new App();
        app.printTriangle(5);
    }

    public String printTriangle(int count) {
        if (count <= 0) return "";
        String p = printTriangle(count - 1);
        p = p + "*";
        System.out.println(p);
        return p;
    }

}

// Result
// *
// **
// ***
// ****
// *****

答案 2 :(得分:0)

如果您想通过循环执行此操作,那么这可能是您想要的:

public static void printStar(String s, int lines) {
  for (int i = 0; i < lines; i++) {
    for (int j = 0; j <= i; j++) {
      System.out.print(s);
    }
    System.out.println();
  }
}

或者只有一个循环:

public static void printStar(String s, int lines) {
  String out = "";
  for (int i = 0; i < lines; i++) {
    out += s;
    System.out.println(out);
  }
}