3

私は比較的単純なJava再帰問題に取り組んでいますが、どこにも簡単な1つの方法の解決策が見つからないようです.

たとえば、ユーザーが 3 を渡すと、出力は次のようになります。

*
**
***
**
*

編集: @dasblinkenlight の助けのおかげで、これは次のように進化しました:

public void patternMaker(int start, int max, int direction){
    if(start == 0){
        return;
    }
    for(int i = 0; i < start; i++){
        System.out.print("*");
    }
    System.out.println();
    if(start == max){
        direction = -1;
    }
    patternMaker(start + direction, max, direction);

これで、正しい量のアスタリスクが適切な順序で出力されます。

*
**
***
**
*

みんな助けてくれてありがとう!

4

4 に答える 4

4

1つのパラメータで再帰できるかどうかはわかりません。2つ必要だと思います。アイデアは次のとおりです。

stars(2, 4)

印刷します

**
***
****
***
**

stars(5, 6)

印刷します

*****
******
*****

これは当然再帰的です。なんで?なぜなら

stars(n, n)

n個の星を印刷するだけです。それが基本ケースです。では、再帰的なステップはどうですか?さて試してみましょう

stars(k, n)

ここで、k<nです。これはこのように行われます

draw a line of k stars
call stars(k + 1, n)
draw a line of k stars

以上です。もちろん、k <nであるかどうかを確認するのは良いことですが、それを理解できると確信しています。

于 2012-07-26T04:25:53.407 に答える
3

進行方向を示す別のパラメーターが必要です。また、いつ上昇から下降に切り替わるかを知るために、終了条件をテストする必要があります。

public void patternMaker(int x, int direction){
    // Direction is either +1 or -1, depending on whether you go up or down
    // at the moment. Once you reach 3, switch the sign;
    // Once you reach zero, stop.

    // Pseudocode:
    // If x is zero, we're done
    // Print x asterisks followed by newline
    // if x == 3, make direction -1
    // Perform the recursive call with (x+direction, direction)
}

どちらの方法も確かに可能ですが、再帰する前に星を描く方がおそらく簡単です。

于 2012-07-26T04:15:45.347 に答える
1
static String patternMaker(int x, String result){
    String curStr ="";
    for (int i=0; i<x; i++)
        curStr += "*";
    curStr += "\n";
    if (result == null){             
         return patternMaker(x-1,curStr);
    }else if (x > 0){           
          return patternMaker(x-1, curStr+result+curStr); 
    }
    else 
        return result;
}

//test with :
System.out.println(patternMaker(3,null));
于 2012-07-26T04:40:09.177 に答える
-1
public class pattern {

public void patternMaker(int x){
    if(x > 0){
        for(int i = 0; i < x; i++){
            for(int j=0;j<=i;j++){
                System.out.print("*");
            }
            System.out.print("\n");
        }
        for(int i = x-1; i > 0; i--){
            for(int j=i;j>0;j--){
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}
public static void main(String[] ar){
    new pattern().patternMaker(3);
}
}
于 2012-07-26T04:59:57.340 に答える