Sierpinski triangle

Last Updated : 20 Feb, 2023

Sierpinski triangle is a fractal and attractive fixed set with the overall shape of an equilateral triangle. It subdivides recursively into smaller triangles. 
 

Sierpinski_triangle1


Examples : 

Input : n = 4
Output :
   * 
  * * 
 *   * 
* * * * 

Input : n = 8
Output :
       * 
      * * 
     *   * 
    * * * * 
   *       * 
  * *     * * 
 *   *   *   * 
* * * * * * * * 


 


Approach : 
 

Sierpinski Triangle will be constructed from an equilateral triangle by repeated removal of triangular subsets. 
Steps for Construction : 
1 . Take any equilateral triangle . 
2 . Divide it into 4 smaller congruent triangle and remove the central triangle . 
3 . Repeat step 2 for each of the remaining smaller triangles forever. 


Below is the program to implement Sierpinski triangle 
 

C++
// C++ program to print sierpinski triangle.
#include <bits/stdc++.h>
using namespace std;

void printSierpinski(int n)
{
    for (int y = n - 1; y >= 0; y--) {

        // printing space till
        // the value of y
        for (int i = 0; i < y; i++) {
            cout<<" ";
        }

        // printing '*'
        for (int x = 0; x + y < n; x++) {

        // printing '*' at the appropriate position
        // is done by the and value of x and y
        // wherever value is 0 we have printed '*'
        if(x & y)
            cout<<" "<<" ";
        else
            cout<<"* ";
        }

        cout<<endl;
    }
}

// Driver code
int main()
{
    int n = 16;

    // Function calling
    printSierpinski(n);

    return 0;
}
Java
// Java program to print 
// sierpinski triangle.
import java.util.*;
import java.io.*;

class GFG 
{
    static void printSierpinski(int n)
    {
        for (int y = n - 1; y >= 0; y--) {

            // printing space till
            // the value of y
            for (int i = 0; i < y; i++) {
                System.out.print(" ");
            }

            // printing '*'
            for (int x = 0; x + y < n; x++) {

                // printing '*' at the appropriate
                // position is done by the and 
                // value of x and y wherever value
                // is 0 we have printed '*'
                if ((x & y) != 0)
                    System.out.print(" "
                                    + " ");
                else
                    System.out.print("* ");
            }

            System.out.print("\n");
        }
    }

    // Driver code
    public static void main(String args[])
    {
        int n = 16;

        // Function calling
        printSierpinski(n);
    }
}

// This code is contributed by Sahil_Bansall
Python3
# Python 3 program to print 
# sierpinski triangle.

def printSierpinski( n) :
    
    y = n - 1
    while(y >= 0) :
        
        # printing space till
        # the value of y
        i = 0
        while(i < y ):
            print(" ",end="")
            i = i + 1

        # printing '*'
        x = 0
        while(x + y < n ):

            # printing '*' at the appropriate
            # position is done by the and 
            # value of x and y wherever value
            # is 0 we have printed '*'
            if ((x & y) != 0) :
                print(" ", end = " ")
            else :
                print("* ", end = "")
            x =x + 1
        
        print()
        y = y - 1
        
# Driver code
n = 16

# Function calling
printSierpinski(n)


# This code is contributed by Nikita Tiwari.
C#
// C# program to print
// sierpinski triangle.
using System;

class GFG {
    static void printSierpinski(int n)
    {
        for (int y = n - 1; y >= 0; y--) {

            // printing space till
            // the value of y
            for (int i = 0; i < y; i++) {
                Console.Write(" ");
            }

            // printing '*'
            for (int x = 0; x + y < n; x++) {

                // printing '*' at the appropriate
                // position is done by the and
                // value of x and y wherever value
                // is 0 we have printed '*'
                if ((x & y) != 0)
                    Console.Write(" " + " ");
                else
                    Console.Write("* ");
            }

            Console.WriteLine();
        }
    }

    // Driver code
    public static void Main()
    {
        int n = 16;

        // Function calling
        printSierpinski(n);
    }
}

// This code is contributed by vt_m
PHP
<?php
// PHP implementation to 
// print sierpinski triangle.

function printSierpinski($n)
{
    for ($y = $n - 1; $y >= 0; $y--) 
    {

        // printing space till
        // the value of y
        for ($i = 0; $i < $y; $i++)
        {
            echo " ";
        }

        // printing '*'
        for ($x = 0; $x + $y < $n; $x++) 
        {

        // printing '*' at the appropriate 
        // position is done by the and value 
        // of x and y wherever value is 0 we 
        // have printed '*'
        if($x & $y)
            echo"  ";
        else
            echo"* ";
        }

        echo "\n";
    }
}

// Driver code
$n = 16;
printSierpinski($n);

// This code is contributed by Mithun Kumar
?>
JavaScript
<script>

// javascript program to print
// sierpinski triangle.

function printSierpinski(n)
{
    for (var y = n - 1; y >= 0; y--) {

        // printing space till
        // the value of y
        for (var i = 0; i < y; i++) {
            document.write("&nbsp;");
        }

        // printing '*'
        for (var x = 0; x + y < n; x++) {

            // printing '*' at the appropriate
            // position is done by the and 
            // value of x and y wherever value
            // is 0 we have printed '*'
            if ((x & y) != 0)
                document.write("&nbsp;&nbsp;&nbsp;");
            else
                document.write("*&nbsp;");
        }

        document.write("<br>");
    }
}

// Driver code
var n = 16;

// Function calling
printSierpinski(n);


// This code contributed by Princi Singh
</script>

Output : 
 

               * 
              * * 
             *   * 
            * * * * 
           *       * 
          * *     * * 
         *   *   *   * 
        * * * * * * * * 
       *               * 
      * *             * * 
     *   *           *   * 
    * * * *         * * * * 
   *       *       *       * 
  * *     * *     * *     * * 
 *   *   *   *   *   *   *   * 
* * * * * * * * * * * * * * * * 

Time complexity: O(n2
Auxiliary space: O(1)


References : Wiki 

Comment