繁体   English   中英

使用递归打印星号

[英]Printing asterisks using recursion

可以使用方法printStars(j)返回一个字符串-一排j星号。 我需要编写一种方法来递归地打印n行星号的三角形。 第一行需要一个*,第二行需要两个*,依此类推。不能使用迭代循环(因此,不可以使用while,do-while或for)。

向后执行此操作的代码非常简单:

public void printTriangle(int n) {
    if(n >= 1) {
        printStars(n));
        printTriangle(n - 1);
    }
}

到目前为止,我的代码在上面,但在下面是相反的。 这是不正确的,因为在每个循环中i都重置为1。 我只是不确定如何去做。 我只能使用一个参数的函数。

public void printTriangle(int n) {
    int i = 1;

    if(i <= n) {
        printStars(i);
        printTriangle(i + 1);
    }
}

只是首先重复,然后打印该行:

public void printTriangle(int n) {
    if(n > 1) {
        printTriangle(n - 1);
    }
    System.out.println(makeStars(n));
}

因此,首先打印较小的三角形,然后附加较长的线。

static int i = 1;

这将确保i在调用函数之间保留其值。 第一次将其初始化为1,并且对该变量所做的任何更改将在调用之间保持不变。

编辑 :正如评论所说,这不是正确的方法。 Daniel Fischer的解决方案更好。

i的最大值作为第二个参数传递,以限制要打印的行数,即i的最大值。

也许是两个参数函数:

public void printTriangle(int i, int n) {
    if(i <= n) {
         System.out.println(printStars(i));
         printTriangle(i+1, n);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM