2016-04-14 175 views
-3

我需要一些幫助來解決一個練習。在這種方法中,我必須打印等於x的2的冪數的星號(「*」)。例如,如果我有2的2次方,它應該打印4個星號(「****」);用遞歸打印「*」

我有一個方法返回我正確的數字,但我有問題使用該數字打印這些星號。

這裏是我的代碼:

public static int writeStars(int number) { 
    if (number == 0) { 
     return 1; 
    } else { 
     int number2 = 2 * writeStars(number - 1); 
     System.out.println(" number " + number2); 
     return number2; 
    } 
} 
+4

「但我有問題,使用該號用於打印這些星號。「 - 這些會是什麼問題?您沒有包含任何星號打印代碼。 – azurefrog

回答

2

下面是解決該問題的一個思路,不放棄在代碼的解決方案。

你的想法是在正確的軌道上,意識到2 x = 2 * 2 x-1。要打印2 x*個字符,您可以打印2 x-1兩次。在你的遞歸方法中,你的基例打印一個*字符,並讓你的遞歸案例遞歸調用兩次,傳遞適當的調整值。

+0

謝謝,問題解決了(: – Kasparas

0

因爲它是在客戶端返回的方法,你應該有

int num = writeStars(someNum); 

然後打印,你只需要一個簡單的for循環

for(int i=0; i < num; i++) 
    System.out.print("*"); 
1

一種方式做到這一點是創建在第i次迭代中2 ^(i-1)星的串。因此,對於4次迭代(x = 4),每次迭代將有8,4,2,1顆星。您可以爲每次迭代返回星號串並將它們連接起來以獲得最終的字符串。

終止條件將是當輸入大小爲0這個代碼可以幫助:

public static String writeStars(int y) { 
    //y is 2^x 
    if(y == 0) 
     return ""; 
    int num_stars = y - y/2; 
    StringBuffer stars_Buffer = new StringBuffer(num_stars); 
    for (int i = 0; i < num_stars; i++){ 
     stars_Buffer.append(""); 
    } 
    return stars_Buffer.toString() + writeStars(y/2); 
} 

呼叫writeStars與輸入2^X:

writeStars(Math.pow(2, x)); 
+1

)你試過編譯這個嗎?當方法返回類型爲int時,你在這裏返回一個'String''',並且沒有分號 – robotlos

+0

謝謝@robotlos,my壞。 – trans1st0r