1

有一个方法 ,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);
    }
}
4

4 回答 4

8

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

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

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

于 2012-10-16T18:39:26.170 回答
1
static int i = 1;

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

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

于 2012-10-16T18:38:31.043 回答
0

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

于 2012-10-16T18:40:41.313 回答
0

也许是两个参数函数:

public void printTriangle(int i, int n) {
    if(i <= n) {
         System.out.println(printStars(i));
         printTriangle(i+1, n);
    }
}
于 2012-10-16T18:41:43.900 回答