有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用递归打印星号

一个方法printStars(j)可以返回一个字符串——一行j星号。我需要编写一个递归打印n行星号三角形的方法。第一行需要有一个*,第二行需要有两个*s,等等。不能使用迭代循环(因此不能使用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) 个答案

  1. # 1 楼答案

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

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

    因此,先打印较小的三角形,然后再添加较长的行

  2. # 2 楼答案

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

  3. # 3 楼答案

    可能有两个参数的函数:

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

    static int i = 1;
    

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

    编辑:正如评论所说,这不是正确的方法。丹尼尔·菲舍尔的解决方案更好