2017-08-29 7 views
1

パスカルの三角形を逆さまにして、もう一度読み上げる再帰的なメソッドを作成しようとしています。私は逆さの三角形とrightide-up三角形を切り替えるためにブール変数を使いたいと思います。Java:Pascalの三角を逆さまにして、昇順で(ブール値で)プリントする再帰的方法

だから今
public class Main 
{ 
    boolean upsideDown = true; 

    public void printPascal(int n) 
    { 
     if(!upsideDown) 
     { 
      //THIS IS WHERE I'M STUCK 
     } 
     if (upsideDown) 
     { 

       if(n < 0) 
        return; 
       for (int k = 0; k <= n; k++) 
       { 
        System.out.print(binom(n, k) + " "); 
       } 
       System.out.println(); 
       printPascal(n - 1); 

     } 
    } 

    public int binom(int n, int k) 
    { 
     if (k==n || k==0) 
      return 1; 
     else return binom(n-1,k-1) + binom(n-1, k); 
    } 

    public static void main(String[] args) 
    { 
     new Main().printPascal(10); //This will print the Pascal's triangle 
            //from levels 10 to 0 
    } 

} 

、私はパスカルの三角形(レベル0から10まで)rightsideアップを印刷しようとしている:これまでのところ、私は正常に逆さまパスカルの三角形を作るために、コードを書かれています。これを実現する再帰的な方法をどうすればできますか?

私はパスカルの三角に関するオンラインのコードがたくさんあることを知っています。しかし、特に私の問題を扱うものは見つけられません。

+0

両方を出力する単一の再帰的メソッドでなければならないのですか? 'printPascalUp'と' printPascalDown'の再帰的メソッドを作るほうが簡単でしょう。 –

+0

あなたの 'printPascal(int n)'メソッドには、(現在の数値に対して)1つのパラメータしかありません。 'upsideDown'の場合、再帰はif(n <0)'を停止します。 '!upsideDown'の場合、メソッドはいつ停止するかを知るために別のパラメータを必要とします。 – howlger

+0

以下の回答は参考になりますか? – Assafs

答えて

2

最も洗練された解決策は、最後のステップが最初に印刷され、次に2番目に最後に印刷されるように、印刷順序を変更することです。これは効果がありますか?

public void printPascal(int n) { 
    if(!upsideDown) 
    { 
     if(n < 0) 
       return; 
      //print the future step first, then print current step 
      printPascal(n - 1); 
      System.out.println(); 
      for (int k = 0; k <= n; k++) 
      { 
       System.out.print(binom(n, k) + " "); 
      } 


    } 
    if (upsideDown) 
    { 

      if(n < 0) 
       return; 
      for (int k = 0; k <= n; k++) 
      { 
       System.out.print(binom(n, k) + " "); 
      } 
      System.out.println(); 
      printPascal(n - 1); 

    } 
} 
+0

@ TheSaviour答えを受け入れることができますか?その横のチェックマークをクリックして緑色にしてください。 – Assafs

+0

これはトリックを行ったようです。ありがとうございました。私はちょうどそれと一緒に遊んで、私はあなたの返答を最良の答えとして選ぶことができる前にもう少し理解しようとしています。しかし、私はあなたが私に必要なものをくれたと確信しています。 – TheSaviour

+1

あなたはなぜfor-loop _after_すべての再帰呼び出しでbinomを呼び出したのか説明できますか?各再帰呼び出し中に_n_の値が何らかの形でメモリに格納されていますか? – TheSaviour

関連する問題