开发者社区> 问答> 正文

仅使用递归打印V形

我试图仅使用递归来打印字母V的形状。我已经在该网站上看到了一些与我的问题有关的代码,但是大多数代码使用循环而不是递归。

这是我的代码:

public class Pattern {

    public static void main(String[] args) {
         printPattern(5);
    }
       public static void Pattern(int count, String s) {
        if (count == 0) {
            return;
        }

        System.out.print(s);
        Pattern(count - 1, s);
    }

    public static void upperhalf(int count, int max) {
        if (count == 0) {
            return;
        }

        Pattern(max - count, " ");
        Pattern(count, "* ");

        System.out.println();

        upperhalf(count - 1, max);
    }



    public static void printPattern(int n) {
        upperhalf(n, n);

    }
}

输出:

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

我想要的输出:


  *       *
   *     *
    *   *
     * *
      *

问题来源:Stack Overflow

展开
收起
montos 2020-03-25 23:30:18 292 0
1 条回答
写回答
取消 提交回答
  • 解决它的一种方法。将您的两个连续的模式调用替换为:

        Pattern(max - count, " ");
        Pattern(1, "* ");
        Pattern(count - 2, "  ");
        Pattern(1, count > 1 ? "* " : "");  
    

    (即您的第一个Pattern调用,然后是单个的显式调用,然后是几个空格(比您的方法少2个空格),最后是)。

    您还需要稍微更改退出语句:

    public static void Pattern(int count, String s) {
        if (count <= 0) { // <= instead of ==
            return;
        }
    

    回答来源:Stack Overflow

    2020-03-25 23:30:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载