2012-02-26 66 views
1

所以我具有其中(遞歸)我應該採取的用戶輸入(INT)中的程序並繪製根據數的向後和向前然後三角形...前下方三角遞歸

用戶輸入:4 (忽略多餘的空格其間的每個,,應該沒有多餘的插圖中)結果:

XXXX 
XXX 
XX 
X 
X 
XX 
XXX 
XXXX 

我已經創建了我認爲應該這樣做的方法,但我有它室內用一個

問題

這個si代碼我到目前爲止

n是輸入數 z是一個計數器,試圖製造後退/前進三角之間去

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

你想讓你的程序返回該字符串或打印該字符串嗎?如果你選擇,並堅持一個,它會容易得多。 – Doboy 2012-02-26 05:26:41

+0

教學遞歸的一個糟糕的例子......感嘆。 – 2012-02-26 06:46:14

+0

@JimGarrison其實,有一個優雅的遞歸方式來做到這一點。但是,沒有人發佈它。 – Taymon 2012-02-26 08:25:30

回答

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重新使用的代碼定義輔助方法是一個好習慣。