2016-11-20 4 views
1

したがって、1つのパラメータnを持つ再帰的メソッドがあり(ループを使用することはできません)、プログラムは2^n "*"を出力します。たとえば、nが2の場合、出力は****、nが3の場合、出力は********です。java単純な再帰

私はいくつかの無限の再帰問題に遭遇したので、私はこの問題を抱えています。

最初に私はこれを持っていましたが、すぐにnがチェックに達することはありません。 1 + n個になるはずだった

enter image description here

↑↑↑(それが動作していなくても)

は、その後、私はこれを試してみました:

public class test { 

    public static void main(String[] args) { 
     printPowerOfTwoStars(3); 

    } 

    public static void printPowerOfTwoStars(int n){ 
     n = (int)Math.pow(2, n); 
     if(n == 0){ 
      return; 
     } 
     else{ 
      System.out.print("*"); 
      printPowerOfTwoStars(n-1); 
     } 

    } 

} 

は、いくつかの無限再帰に走りました再び。

これはシンプルなロジックの単純なプログラムのようですが、nと比較されているものが変化し続けるため、条件チェックに問題があります。

この問題を解決するにはどうすればよいですか?

ヘルパーメソッドを使用せずに静的変数を作成しないでください。

あなたはnのパワーに2がちょうど2 n-1のパワーに、倍増しているという事実を使用する必要があなたに

答えて

5

ありがとうございます。あなたの基本的なケースは、0の累乗2が1であるということです。

public static void printPowerOfTwoStars(int n){ 
    if(n <= 0){ 
     System.out.print("*"); 
    } 
    else{ 
     printPowerOfTwoStars(n-1); 
     printPowerOfTwoStars(n-1); 
    } 
} 
+0

それは素晴らしいです!この場合、Math.powを使用する方法があるのであれば、今私は興味があります。ありがとうございました! – yyin

+0

「Math.pow」を使うのは難しいと思っていました。 –

+0

問題が3^n回印刷された場合、どのようにこの問題を実装しますか?同じロジックを使って、** 3^nは3^n-1で、3倍(3^n-1)x 3 = 3^n **です。それはちょうど 'printPowerOfTwoStars(n-1);' 3回ですか? – yyin