2015-04-17 23 views
1

我試圖回答這個問題,但我似乎無法讓它恢復正確。我知道這將是非常簡單的,但我似乎無法得到這個。這是用java編寫的。java的遞歸明星力量

編寫一個遞歸方法starString,它接受一個整數參數n 並返回包含星號(星號)的長度爲2n的字符串對象(即2到n次冪)。 例如:請忽略這是用於格式化的破折號。我只需要發回什麼是""

調用---------------------輸出----------- ---------原因

starString(0); ------ * -------------------- 2power0 = 1

starString(1); - ---- ** -------------------- 2power1= 2

starString(2); ------ **** ------------ -------- 2power2= 4

你可能會認爲n>0。請注意,您的方法體不能使用迭代

這裏是我有:

private static String star(int n){ 
    if (n==0){ 
     String b ="*"; 
     return b; 
    } 
    else { 
     String b ="**"; 
     n-=1; 
     star(n); 
     return b; 
    } 
} 
+0

首先閱讀了關於遞歸。如果我們在這裏提供答案。它不會幫助你理解 –

+0

可能的提示:''*「'+'」*「'=>'」**「'''**」'''''* ***「'/ etc – 2015-04-17 11:27:24

+0

我同意@ThusithaThilinaDayaratne。幾個月前,我自己一直在與遞歸做鬥爭,並想了解這個概念以及如何使用它。 [本網站](http://codingbat.com/java/Recursion-1)幫助我很好地理解遞歸。我還沒有完成所有測試,但我發現它確實很好。 –

回答

2

對於任何n > 0你總是返回"**",而忽略star(n)電話,這是錯誤的結果。
正確的版本是:

private static String star(int n) { 
    if (n==0) { 
    String b ="*"; 
    return b; 
    } else { 
    String t = star(n-1); 
    return t + t; 
    } 
} 
+5

不要回答這個問題。然後他不會試圖去理解這個概念。 –

+0

這個答案是不正確的。星星的長度正好是'n + 1'的長度。 –

+1

@BuhakeSindi你爲什麼這麼認爲? 'star(0) - > *''''star(1) - > **','star(2) - > ****'等。這就是要求的,不是嗎? –

3

試試這個:

private static String startStar(int n) { 
    if (n==0) { 
     return "*"; 
    } else { 
     return startStar(n-1)+startStar(n-1); 
    } 
} 
+0

一次調用遞歸併將結果加倍會更有效。您的解決方案進行2 ** n-1遞歸調用。 – pjs

+0

@pjs,n = 0時的情況如何?當你將結果加倍時,你將得到2而不是1. – baza92

+0

首先,OP明確表示n> 0.其次,如果用0調用,那麼你不會在else子句中發生加倍。 – pjs

0
private static String starString(int n) throws IllegalArgumentException { 
    if (n == 0) { 
     return "*"; 
    } else if (n < 0) { 
     try { 
      throw new IllegalArgumentException("You can't pass a value less than 0"); 
     } catch (IllegalArgumentException e) { 
      System.out.println("Caught an IllegalArgumentException: " + e.getMessage()); 
      return ""; 
     } 
    } else { 
     return starString(n - 1) + starString(n - 1); 
    } 
}