使用递归打印星号

时间:2012-10-16 18:36:27

标签: java 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);
    }
}

4 个答案:

答案 0 :(得分:8)

首先重复,然后打印行:

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

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

答案 1 :(得分:1)

static int i = 1;

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

可能有两个参数功能:

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