2016-11-03 2 views
0

Je me demande comment convertir une fonction/classe récursive en une fonction itérative. J'ai créé un triangle de Pascal récursif, et j'ai maintenant besoin de le comparer à un itératif.Récursif au Triangle itératif de Pascal

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); 
    } 
} 

Que dois-je changer pour le rendre itératif? Je suis encore un peu incertain de comment cela fonctionne. Merci d'avance!

+0

La réponse à votre question est-elle donnée dans cette question: [Pascal's Triangle Format] (http://stackoverflow.com/q/19918994/576719)? –

Répondre

0

Branchez ces deux fonctions ci-dessous dans une classe pascals. Je l'ai testé et ça fonctionne. Ce lien que Prateek Darmwal a posté est à peu près la même chose.

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

Donc c'est un triangle de Pascal itératif? – Cesarion

+0

Oui. Les fonctions boucles (c'est-à-dire itère) et ne s'appelle pas comme les fonctions récursives. Voir ici pour plus de détails sur la différence entre récursif et itératif: http://www.advanced-ict.info/programming/recursion.html –

+0

Merci pour l'aide! – Cesarion