2016-11-03 26 views
0

再帰関数/クラスを反復的なものに変換する方法を知りました。 私は再帰的なパスカルの三角形を作ったので、これを反復型と比較する必要があります。反復的なパスカルの三角形

public class RecursivePascal extends ErrorPascal implements Pascal 
{ 
    private int n; 

    RecursivePascal(int n) throws Exception 
    { 
     super(n); 
     this.n = n; 
    } 

    public void printPascal() 
    { 
     printPascal(n, false); 
    } 

    public void printPascal(boolean upsideDown) 
    { 
     printPascal(n, upsideDown); 
    } 

    private void printPascal(int n, boolean upsideDown) 
    { 
     if (n == 0) { return; } 

     if (!upsideDown) { printPascal(n - 1, upsideDown); } 

     for (int i = 0; i < n; i++) 
     { 
      System.out.print(binom(n - 1, i) + (n == i + 1 ? "\n" : " ")); 
     } 

     if (upsideDown) { printPascal(n - 1, upsideDown); } 
    } 

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

     return binom(n - 1, k - 1) + binom(n - 1, k); 
    } 
} 

私はそれを反復させるために変更するには何が必要ですか?私はまだこれがどのように動作するのか少し不明です。前もって感謝します!あなたの答えを見つけるでしょう、このリンクを介して

+0

[パスカルの三角形の形式](http://stackoverflow.com/q/19918994/576719)の質問に答えがありますか? –

答えて

0

プラグこれらの二つの機能を詳細に説明しました。私はそれをテストし、それは動作します。 Prateek Darmwalが投稿したそのリンクは、ほとんど同じことです。

public void nonRecursivePrint() 
    { 
    nonRecursivePrint(n, true); 
    } 

    public void nonRecursivePrint(int n, boolean upsideDown) 
    { 
    if (!upsideDown) 
    { 
     for (int j=0; j<(n+1); j++) 
     { 
     for (int i=0; i<(j); i++) 
     { 
      System.out.print(binom(j - 1, i) + (j == i + 1 ? "\n" : " ")); 
     } 
     } 
    } 
    else 
    { 
     for (int j=n; j>0; j--) 
     { 
     for (int i=0; i<(j); i++) 
     { 
     System.out.print(binom(j - 1, i) + (j == i + 1 ? "\n" : " ")); 
     } 
     } 
    }  
    } 
+0

これは反復的なパスカルの三角形ですか? – Cesarion

+0

はい。関数はループする(すなわち反復する)反復関数のようにそれ自身を呼び出さない。再帰と反復の違いの詳細については、こちらを参照してください。http://www.advanced-ict.info/programming/recursion.html –

+0

ありがとうございました! – Cesarion