2012-02-26 1 views
1

だから私は、私は、ユーザ入力(int)を取ると数に応じて、前方そして後方と三角形を描くことになっています(再帰付き)でプログラムを持っている...トライアングル再帰

ユーザ入力以下EX :4 (その間の余分なラインがあってはならない,,各中間に余分なスペースを無視する)結果:

XXXX 
XXX 
XX 
X 
X 
XX 
XXX 
XXXX 

私は私はそれを行うべきだと思うする方法を作成しましたが、私はそれwiht問題を抱えています

これまで私が持っていたコード

nは入力数 Zはエラー・メッセージは、いくつかのINFINITループ以上の流れが存在することであるが、私はできない後方/前方三角形

public static String drawLine(int n, int z){ 

      if(n!=0&& z<(n+1)){ 
       for(int i=1;i<=n;i++) 
        System.out.print("X"); 
       System.out.println(); 
       z+=1; 
       drawLine(n-1,z); 

       return""; 
      } 
      else{ 
      if(z==(2*n+1)) return ""; 
      z+=1; 
      String p = drawLine(n - 1,z); 
      p = p + "X"; 
      System.out.println(p); 


      return p; } 

      } 

を行う間にしようとすると移動するカウンタでありますエラーを見つけて....助けてください!

+1

プログラムでその文字列を返すか、その文字列を出力しますか?あなたが選択して1つに固執すれば、はるかに簡単になります。 – Doboy

+0

再帰を教えるためのどんなに厄介な例....一息。 –

+0

@ JimGarrison実際、これを行うためのエレガントな再帰的な方法があります。しかし誰もそれを投稿していない。 – Taymon

答えて

0

これは、問題文のように思える:

n != 0 

n = -1か?あなたのループは無限に続くでしょう。 n > 0を試してみてください。

2

それは単純な代替だ、これを試してください:あなたが唯一の再帰的な方法についてパラメータを必要とする

public static void drawLine(int n) { 
    if (n > 0) { 
     printChar('X', n); 
     drawLine(n - 1); 
     printChar('X', n); 
    } 
} 

public static void printChar(char c, int n) { 
    for (int i = 0; i < n; i++) 
     System.out.print(c); 
    System.out.println(); 
} 

お知らせ。が基本ケース(n <= 0)に達した後に、を返したときに、正しい数の文字を再帰的に処理できるようにします。

コメントの中で述べたように、Stringを返すか、Stringを印刷する方が良いですが、両方の方法を混在させないでください(後者を選択しました)。また、私の解決策ではprintCharのように、再利用されるコードのヘルパーメソッドを定義することをお勧めします。