Answer:
/ Sierpinski.java
public class Sierpinski {
      // method to find the height of an equilateral triangle with side length =
      // length
      public static double height(double length) {
            // formula= length*sqrt(3)/2
            double h = (length * Math.sqrt(3)) / 2.0;
            return h;
      }
      // method to draw a filled triangle (pointed downwards) with bottom vertex
      // x,y
      public static void filledTriangle(double x, double y, double length) {
            // finding height
            double h = height(length);
            // filling triangle as a polygon
            // passing x, x-length/2, x+length/2 as x coordinates
            // and y, y+h, y+h as y coordinates
            StdDraw.filledPolygon(new double[] { x, x - (length / 2.0),
                        x + (length / 2.0) }, new double[] { y, y + h, y + h });
      }
      // method to draw an n level sierpinski triangle
      public static void sierpinski(int n, double x, double y, double length) {
            // checking if n is above 0 (base condition)
            if (n > 0) {
                  // drawing a filled triangle with x, y as bottom coordinate, length
                  // as side length
                  filledTriangle(x, y, length);
                  // drawing the triangle(s) on the top
                  sierpinski(n - 1, x, y + height(length), length / 2);
                  // drawing the triangle(s) on the left side
                  sierpinski(n - 1, x - (length / 2.0), y, length / 2);
                  // drawing the triangle(s) on the right side
                  sierpinski(n - 1, x + (length / 2.0), y, length / 2);
            }
      }
      public static void main(String[] args) {
            // parsing first command line argument as integer, if you dont provide
            // the value while running the program, this program will cause
            // exception.
            int n = Integer.parseInt(args[0]);
            // length of the outline triangle
            double length = 1;
            // finding height
            double h = height(length);
            // drawing a triangle (pointed upwards) to represent the outline.
            StdDraw.polygon(new double[] { 0, length / 2, length }, new double[] {
                        0, h, 0 });
            // drawing n level sierpinski triangle(s) with length / 2, 0 as x,y
            // coordinates and length / 2 as initial side length
            sierpinski(n, length / 2, 0, length / 2);
      }
}