簡體   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