【问题标题】:Recursive Print Method递归打印方法
【发布时间】:2020-08-10 12:59:20
【问题描述】:

我正在尝试打印以下模式:

0
11
0
222
0
3333
0
222
0
11
0

我想通过在所述递归方法中使用递归和循环来实现这一点,该方法会传递一个整数值。 int 值决定了这个金字塔模式走多远。在上面的示例中,int 值将是 3。 我设法得到了下半部分,但我不知道得到上半部分。

if (arg != 0) {
            System.out.println("0");
            for (int i = 0; i <= arg; i++) {
                System.out.print(arg);
            }
            System.out.println();
            print(arg - 1);
        }

我如何能够以某种方式实现一些增量,从而减少此递归?因为我认为这就是我可以实现上述模式的方法。

非常感谢您!

【问题讨论】:

  • 您在寻找递归解决方案还是迭代解决方案?
  • 如果您传递两个值 (1,n) 并递归到 n,然后在达到 n 的值时使用另一种方法向下递归。
  • @TimBiegeleisen 我想这是一种混合,因此造成了混乱。零和下一个数字应该是递归打印的,但数字 (1, 2, 3) 应该通过循环打印(因此是迭代的)。
  • @arundeepchohan 这可以使用一种方法并只传递一个值。
  • I guess it's kind of a mix ...这里的问题是你猜测。递归和迭代解决方案是解决此问题的非常不同的方法,您很可能只要求一种方法。

标签: java recursion


【解决方案1】:

你可以传递两个参数。最大值和起始值将为零和

然后增加起始值直到达到最大值

然后递减 Max 直到达到零

致电-->printline(3);

  private static void printline(int input,  int... vars) {
        if (input == 0) {
            System.out.println(0);
            return;
        }
        int start= vars.length > 0 ? vars[0] : 0;
        start++;
        System.out.println("0");
        for (int i = 0; (i <= start && i <= input); i++) {
            System.out.print(start >= input ? input : start);
        }
        System.out.println();
        if (start >= input) {
            input--;
        }

        printline(input, start);

    }
}

【讨论】:

  • 感谢您的帮助,谢谢。但它应该只传递一个参数。对我来说有点头疼。
  • 将第二个作为默认参数,因为您将始终传递零。所以当你打电话时,你只会传递一个参数。更新了答案
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 2019-04-03
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多