1

printStars(j)文字列 (jアスタリスクの行) を返すメソッドが利用可能です。nアスタリスクの行の三角形を再帰的に出力するメソッドを作成する必要があります。最初の行には 1 つの *、2 番目の行には 2 つの * が必要です。反復ループは使用できません (したがって、while、do-while、または for は使用できません)。

逆方向に実行するコードは非常に単純です。

public void printTriangle(int n) {
    if(n >= 1) {
        printStars(n));
        printTriangle(n - 1);
    }
}

これまでのところ、上記の逆のコードは以下のとおりです。i各ループで 1 にリセットされるため、正しくありません。どうすればいいのかわかりません。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

たぶん2つのパラメータ関数:

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 に答える
0

の最大値を 2 番目のパラメータとして渡し、i印刷する行数を制限します。つまり、 の最大値ですi

于 2012-10-16T18:40:41.313 に答える