code: public class SierpinskiTriangle {
  
      public static void main(String[] args) {
          System.out.println(getSierpinskiTriangle(4));
      }
  
      private static final String getSierpinskiTriangle(int n) {
          if ( n == 0 ) {
              return "*";
          }
  
          String s = getSierpinskiTriangle(n-1);
          String [] split = s.split("\n");
          int length = split.length;
  
          //  Top triangle
          StringBuilder sb = new StringBuilder();
          String top = buildSpace((int)Math.pow(2, n-1));
          for ( int i = 0 ; i < length ;i++ ) {
              sb.append(top);
              sb.append(split[i]);
              sb.append("\n");
          }
  
          //  Two triangles side by side
          for ( int i = 0 ; i < length ;i++ ) {
              sb.append(split[i]);
              sb.append(buildSpace(length-i));
              sb.append(split[i]);
              sb.append("\n");
          }
          return sb.toString();
      }
  
      private static String buildSpace(int n) {
          StringBuilder sb = new StringBuilder();
          while ( n > 0 ) {
              sb.append(" ");
              n--;
          }
          return sb.toString();
      }
  
  }
  