2017-04-17 108 views
0

我的代碼應該用3調用時打印下面的輸出,但是每次運行它時它都會打印2行null。遞歸問題

--- 
*-- 
**- 
*** 

每當我嘗試改變某些東西時,它會在運行時出現堆棧溢出錯誤。我知道如何修復這個輸出,但不能遞歸。我們不允許使用任何循環,這是我遇到問題的地方。任何幫助將非常感激。

public void printPattern(int n) { 
if(n>0){ 
    System.out.println(printPatternStripes(n)); 
    printPatternStripes(n-1); 
    System.out.println(printPatternStars(n)); 
    printPatternStars(n+1); 
} 
} 
    private String printPatternStars(int stars){ 
     if(stars==0){ 
     return printPatternStars(stars+1) + "*"; 


     } 
     else{ 
    return null; 
    }} 

    private String printPatternStripes(int stripes){ 
     if(stripes!=0){ 
      return printPatternStripes(stripes-1)+ "_"; 
     } 
     else{ 
     return null; 
    }} 
+1

如果(!星星= 0)返回空值,如果(條紋!= 0)你返回null。這造成了很多問題。 –

+3

必須是[同​​學](http://stackoverflow.com/q/43434546/2970947)。 –

+0

它應該以下劃線開頭並用*一行替換它,直到它碰到基本情況 –

回答

1

因爲你被允許使用的輔助方法,那麼像這樣的工作:

public void printPattern(int n) { 
    printHelper(n, n); 
} 

public void printHelper(int n, int initialSize) { 
    if(n > 0) { 
     printHelper(n - 1, initialSize); 
    } 

    System.out.print(stringHelper("*", n)); 
    System.out.println(stringHelper("-", initialSize - n)); 
} 

public String stringHelper(String string, int length) { 
    if (length == 0) { 
     return ""; 
    } 

    if (string.length() == length) { 
     return string; 
    } 

    return stringHelper(string + string.charAt(0), length); 
} 

用法:

printPattern(3); 

>> --- 
    *-- 
    **- 
    *** 
+0

我無法更改參數,但我可以使用助手方法 –

+0

@ J.Doe確保您的教師認爲使用'Collections.nCopies'即可。如果他們希望你使用遞歸來生成恆星的子串和破折號的子串,就像你試圖在你的問題中做的那樣,他們可能會考慮使用這樣的庫方法來作弊。如果你不能使用它們,你仍然可以編寫你自己的遞歸幫助器方法,它和'String.join(「,Collections.nCopies(n,」*「))''一樣。 – ajb

+0

我不確定它是否會導致問題。是否有一種簡單的方式來執行打印語句? –

-1

一個問題是,而不是return null;,你應該return "";兩個else語句。

+0

現在它只是返回一條實線 –