2016-11-03 5 views
0

Мне интересно, как преобразовать рекурсивную функцию/класс в итеративный. Я сделал рекурсивный треугольник Паскаля, и теперь нужно сравнить его с итеративным.Рекурсивный для треугольника Iterative 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); 
    } 
} 

Что мне нужно изменить, чтобы сделать его итеративным? Я все еще немного не уверен, как это работает. Заранее спасибо!

+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