Рекурсивный к Итерационному треугольнику Паскаля

Мне интересно, как преобразовать рекурсивную функцию/класс в итеративную.
Я сделал рекурсивный треугольник Паскаля, и теперь нужно сравнить его с итеративным.

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

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

3 ответа

  1. Подключите эти две функции ниже в класс pascal. Я протестировал его, и он работает. Эта ссылка, которую опубликовал 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" : " "));
            }
          }
        }       
      }
    
  2. Вот код для рекурсивного треугольника Паскаля,

    import java.util.Scanner;
    
    public class PascalsTriangleRecursion 
    {
       public static void printPascal(int num)
       {
          for(int a = 0; a < num; a++)
          {
             for(int b = 0; b <= a; b++)
             {
                System.out.print(pascalTriangle(a, b) + " ");
             }
             System.out.println();
          }
       }
    
       public static int pascalTriangle(int a, int b)
       {
          if(b == 0)
          {
             return 1;
          }
          else if(b == a)
          {
             return 1;
          }
          else
          {
             return pascalTriangle(a - 1, b - 1) + pascalTriangle(a - 1, b);
          }
       }
    
       public static void main(String[] args) 
       {
          Scanner sc = new Scanner(System.in);
          System.out.print("Please enter number of rows : ");
          int number = sc.nextInt();
          printPascal(number);
          sc.close();
       }
    }
    

    Для получения дополнительной информации о Pascal triangle обратитесь к этому ресурсу.