簡體   English   中英

Java練習:使用遞歸方法打印星號三角形及其倒三角形

[英]Java Exercise: Printing asterisks Triangle and its inverted triangle using recursion method

我需要打印一個三角形及其倒三角形(位於其尖端)。 我設法只打印出三角形。 我知道我可以輕松地使用for循環,但是我想知道如何使用遞歸,在我的情況下,我不知道如何同時打印三角形和倒置三角形,謝謝。

Example desired output:
*
**
***
****
****
***
**
*

我的代碼:

public class Recursion1 {
    public static void main(String[] args) {
        Recursion1 me = new Recursion1();
        me.doIt();
    }

    public void doIt() {        
        nums(4);
    }

    public String nums(int counts) {
        if (counts <= 0) {
            return "";
        }   

        String p = nums(counts - 1);
        p = p +"*";
        System.out.print(p);
        System.out.println();

        return p;
    }
}

我的結果:

Results:
*
**
***
****

您必須重新考慮問題,這可能是一種可能的解決方案:

public class Recursion1 {
private static int endValue;
private static int startValue = 1 ;

public Recursion1(int endValue){
    Recursion1.endValue = endValue;
}

public static void main(String[] args) {
    Recursion1 me = new Recursion1(4);
    me.doIt();
}

public void doIt() {        
    nums("*");
}

public String nums(String value) {
    if( startValue == endValue){
        System.out.println(value);
    }else{
        System.out.println(value);
        startValue ++;
        value = value.concat("*");
        nums(value);
        value = value.substring(1);
        System.out.println(value);
    }
    return value;
}}

我建議將結果String的創建與打印分開。 這樣一來,您就可以對結果執行其他任何操作,而且效率可能更高。 為了提高效率,建議使用StringBuilder ,因為它避免創建和丟棄許多String對象。 為了提高效率,最好附加單個char而不是帶有單個字符的String

這里是考慮到這些的解決方案。 您將初始計數為零,行數和新的StringBuilder作為參數傳遞。 *的數量增加到行數的一半,然后減少。 在每個遞歸調用中都添加新行。

public void doIt() {
    String p = nums(0, 7, new StringBuilder());
    System.out.print(p);
}

public String nums(int counts, int lines, StringBuilder b) {
    if (counts == lines)
        return b.toString();

    int size = counts < lines / 2 ?
               counts :
               lines - counts - 1;

    for (int i = 0; i < size + 1; ++i)
        b.append('*');
    b.append('\n');

    return nums(counts + 1, lines, b);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM