2016-04-14 11 views
-3

1つの練習問題を解決するには何らかの助けが必要です。この方法では、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

はここでの問題を解決するための1つのアイデアだ:

は、ここに私のコードです。

あなたの考えは正しいトラックにあり、2 x = 2 * 2 x-1であることを認識しています。 2 x*の文字を印刷するには、2 x-1を2回と印刷できます。あなたの再帰的な方法では、あなたのベースケースは*という文字を1つ印刷し、再帰的呼び出しはを2回入れてとなり、適切に調整された値を渡してください。

+0

ありがとうございました問題を解決しました(: – Kasparas

0

それはあなたが印刷しその後

int num = writeStars(someNum); 

を持っている必要があり、あなたのクライアントでの復帰方法ですので、あなたはそれを行うにはループ

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

するための簡単な方法の一つは、作成することである必要がありますi番目の反復で2 ^(i-1)星の文字列。したがって、4回の反復(x = 4)に対して、反復ごとに8,4,2,1星があります。それぞれの反復で星の文字列を返し、それらを連結して最終的な文字列を得ることができます。入力2^xは

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:

入力サイズは、このコードは役立つかもしれ0のとき終了条件は次のようになります

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

これをコンパイルしてみましたか?メソッドの戻り値の型が 'int'のとき' '戻り値 '' 'を返すでしょう)また、セミコロンもありません – robotlos

+0

@robotlos、my悪い。 – trans1st0r

関連する問題