Tribonacci Numbers

20 Feb, 2022
The tribonacci series is a generalization of the Fibonacci sequence where each term is the sum of the three preceding terms.The Tribonacci Sequence: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81, 149, 274, 504, 927, 1705, 3136, 5768, 10609, 19513, 35890, 66012, 121415, 223317, 410744, 755476, 1389537, 2555757, 4700770, 8646064, 15902591, 29249425, 53798080, 98950096, 181997601, 334745777, 615693474, 1132436852... so onGeneral Form of Tribonacci number:  
a(n) = a(n-1) + a(n-2) + a(n-3) 
with 
a(0) = a(1) = 0, a(2) = 1. 
Given a value N, task is to print first N Tribonacci Numbers. Examples:  
Input : 5
Output : 0, 0, 1, 1, 2

Input : 10
Output : 0, 0, 1, 1, 2, 4, 7, 13, 24, 44

Input : 20
Output : 0, 0, 1, 1, 2, 4, 7, 13, 24, 44,
         81, 149, 274, 504, 927, 1705, 3136, 
          5768, 10609, 19513
 
A simple solution is to simply follow recursive formula and write recursive code for it,  
C++
Java
Python
C#
PHP
Javascript
// A simple recursive CPP program to print// first n Tribonacci numbers.#include <iostream>using namespace std; int printTribRec(int n){    if (n == 0 || n == 1 || n == 2)        return 0;     if (n == 3)        return 1;    else        return printTribRec(n - 1) +               printTribRec(n - 2) +               printTribRec(n - 3);} void printTrib(int n){    for (int i = 1; i < n; i++)        cout << printTribRec(i) << " ";} // Driver codeint main(){    int n = 10;    printTrib(n);    return 0;}
// A simple recursive CPP program// first n Tribonacci numbers.import java.io.*; class GFG {         // Recursion Function    static int printTribRec(int n)    {                 if (n == 0 || n == 1 || n == 2)            return 0;                     if (n == 3)            return 1;        else            return printTribRec(n - 1) +                   printTribRec(n - 2) +                   printTribRec(n - 3);    }         static void printTrib(int n)    {        for (int i = 1; i < n; i++)            System.out.print(printTribRec(i)                             +" ");    }          // Driver code    public static void main(String args[])    {        int n = 10;         printTrib(n);    }} // This code is contributed by Nikita tiwari.
# A simple recursive CPP program to print# first n Tribonacci numbers. def printTribRec(n) :    if (n == 0 or n == 1 or n == 2) :        return 0    elif (n == 3) :        return 1    else :        return (printTribRec(n - 1) +                printTribRec(n - 2) +                printTribRec(n - 3))          def printTrib(n) :    for i in range(1, n) :        print( printTribRec(i) , " ", end = "")          # Driver coden = 10printTrib(n)  # This code is contributed by Nikita Tiwari.
// A simple recursive C# program// first n Tribinocci numbers.using System; class GFG {         // Recursion Function    static int printTribRec(int n)    {                 if (n == 0 || n == 1 || n == 2)            return 0;                     if (n == 3)            return 1;        else            return printTribRec(n - 1) +                   printTribRec(n - 2) +                   printTribRec(n - 3);    }         static void printTrib(int n)    {        for (int i = 1; i < n; i++)            Console.Write(printTribRec(i)                                    +" ");    }         // Driver code    public static void Main()    {        int n = 10;         printTrib(n);    }} // This code is contributed by vt_m.
<?php// A simple recursive PHP program to// print first n Tribinocci numbers. function printTribRec($n){    if ($n == 0 || $n == 1 || $n == 2)        return 0;     if ($n == 3)        return 1;    else        return printTribRec($n - 1) +               printTribRec($n - 2) +               printTribRec($n - 3);} function printTrib($n){    for ($i = 1; $i <= $n; $i++)        echo printTribRec($i), " ";}     // Driver Code    $n = 10;    printTrib($n); // This code is contributed by ajit?>
<script>// A simple recursive Javascript program to// print first n Tribinocci numbers. function printTribRec(n){    if (n == 0 || n == 1 || n == 2)        return 0;     if (n == 3)        return 1;    else        return printTribRec(n - 1) +            printTribRec(n - 2) +            printTribRec(n - 3);} function printTrib(n){    for (let i = 1; i <= n; i++)        document.write(printTribRec(i) + " ");}     // Driver Code    let n = 10;    printTrib(n); // This code is contributed by _saurabh_jaiswal</script>
0 0 1 1 2 4 7 13 24 
Time complexity of above solution is exponential.A better solution is to use Dynamic Programming. 
1) Top-Down Dp Memoization:
C++
Python3
// A simple recursive CPP program to print// first n Tribonacci numbers.#include <bits/stdc++.h>using namespace std; int printTribRec(int n, vector<int> &dp){    if (n == 0 || n == 1 || n == 2)        return 0;       if(dp[n] != -1){        return dp[n] ;    }     if (n == 3)        return 1;    else        return dp[n] = printTribRec(n - 1, dp) +                       printTribRec(n - 2, dp) +                       printTribRec(n - 3, dp);} void printTrib(int n){    // dp vector to store subproblems    vector<int> dp(n+1, -1) ;    for (int i = 1; i < n; i++)        cout << printTribRec(i, dp) << " ";} // Driver codeint main(){    int n = 10;    printTrib(n);    return 0;}
def tribonacci(n):    h={} #creating the dictionary to store the results    def tribo(n):        if n in h:            return h[n]        if n==0:            return 0        elif n==1 or n==2:            return 1        else:            res=tribo(n-3)+tribo(n-2)+tribo(n-1)            h[n]=res #storing the results so that we can reuse it again        return res    return tribo(n)n=10for i in range(n):    print(tribonacci(i),end=' ')
0 0 1 1 2 4 7 13 24 
2) Bottom-Up DP Tabulation: 
C++
Java
Python3
C#
PHP
Javascript
// A DP based CPP// program to print// first n Tribonacci// numbers.#include <iostream>using namespace std; int printTrib(int n){    int dp[n];    dp[0] = dp[1] = 0;    dp[2] = 1;     for (int i = 3; i < n; i++)        dp[i] = dp[i - 1] +                dp[i - 2] +                dp[i - 3];     for (int i = 0; i < n; i++)        cout << dp[i] << " ";} // Driver codeint main(){    int n = 10;    printTrib(n);    return 0;}
// A DP based Java program// to print first n// Tribonacci numbers.import java.io.*; class GFG {         static void printTrib(int n)    {        int dp[]=new int[n];        dp[0] = dp[1] = 0;        dp[2] = 1;             for (int i = 3; i < n; i++)            dp[i] = dp[i - 1] +                    dp[i - 2] +                    dp[i - 3];             for (int i = 0; i < n; i++)            System.out.print(dp[i] + " ");    }         // Driver code    public static void main(String args[])    {        int n = 10;        printTrib(n);    }} /* This code is contributed by Nikita Tiwari.*/
# A DP based# Python 3# program to print# first n Tribonacci# numbers. def printTrib(n) :     dp = [0] * n    dp[0] = dp[1] = 0;    dp[2] = 1;     for i in range(3,n) :        dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];     for i in range(0,n) :        print(dp[i] , " ", end="")          # Driver coden = 10printTrib(n) # This code is contributed by Nikita Tiwari.
// A DP based C# program// to print first n// Tribonacci numbers.using System; class GFG {         static void printTrib(int n)    {        int []dp = new int[n];        dp[0] = dp[1] = 0;        dp[2] = 1;             for (int i = 3; i < n; i++)            dp[i] = dp[i - 1] +                    dp[i - 2] +                    dp[i - 3];             for (int i = 0; i < n; i++)        Console.Write(dp[i] + " ");    }         // Driver code    public static void Main()    {        int n = 10;        printTrib(n);    }} /* This code is contributed by vt_m.*/
<?php// A DP based PHP program// to print first n// Tribonacci numbers. function printTrib($n){     $dp[0] = $dp[1] = 0;    $dp[2] = 1;     for ($i = 3; $i < $n; $i++)        $dp[$i] = $dp[$i - 1] +                  $dp[$i - 2] +                  $dp[$i - 3];     for ($i = 0; $i < $n; $i++)        echo $dp[$i] ," ";} // Driver code$n = 10;printTrib($n); // This code is contributed by ajit?>
<script>// Javascript program// to print first n// Tribonacci numbers.    function printTrib(n)    {        let dp = Array.from({length: n}, (_, i) => 0);        dp[0] = dp[1] = 0;        dp[2] = 1;              for (let i = 3; i < n; i++)            dp[i] = dp[i - 1] +                    dp[i - 2] +                    dp[i - 3];              for (let i = 0; i < n; i++)            document.write(dp[i] + " ");    }   // driver function        let n = 10;        printTrib(n);     // This code is contributed by code_hunt.</script>   
0 0 1 1 2 4 7 13 24 44 
Time complexity of above is linear, but it requires extra space. We can optimizes space used in above solution using three variables to keep track of previous three numbers. 
C++
Java
Python3
C#
PHP
Javascript
// A space optimized// based CPP program to// print first n// Tribonacci numbers.#include <iostream>using namespace std; void printTrib(int n){    if (n < 1)        return;     // Initialize first    // three numbers    int first = 0, second = 0;    int third = 1;     cout << first << " ";    if (n > 1)        cout << second << " ";         if (n > 2)        cout << second << " ";     // Loop to add previous    // three numbers for    // each number starting    // from 3 and then assign    // first, second, third    // to second, third, and    // curr to third respectively    for (int i = 3; i < n; i++)    {        int curr = first + second + third;        first = second;        second = third;        third = curr;         cout << curr << " ";    }} // Driver codeint main(){    int n = 10;    printTrib(n);    return 0;}
// A space optimized// based Java program// to print first n// Tribinocci numbers.import java.io.*; class GFG {         static void printTrib(int n)    {        if (n < 1)            return;             // Initialize first        // three numbers        int first = 0, second = 0;        int third = 1;             System.out.print(first + " ");        if (n > 1)            System.out.print(second + " ");                 if (n > 2)            System.out.print(second + " ");             // Loop to add previous        // three numbers for        // each number starting        // from 3 and then assign        // first, second, third        // to second, third, and curr        // to third respectively        for (int i = 3; i < n; i++)        {            int curr = first + second + third;            first = second;            second = third;            third = curr;                 System.out.print(curr +" ");        }    }         // Driver code    public static void main(String args[])    {        int n = 10;        printTrib(n);    }} // This code is contributed by Nikita Tiwari.
# A space optimized# based Python 3# program to print# first n Tribinocci# numbers. def printTrib(n) :    if (n < 1) :        return      # Initialize first    # three numbers    first = 0    second = 0    third = 1     print( first , " ", end="")    if (n > 1) :        print(second, " ",end="")    if (n > 2) :        print(second, " ", end="")     # Loop to add previous    # three numbers for    # each number starting    # from 3 and then assign    # first, second, third    # to second, third, and curr    # to third respectively    for i in range(3, n) :        curr = first + second + third        first = second        second = third        third = curr         print(curr , " ", end="")          # Driver coden = 10printTrib(n) # This code is contributed by Nikita Tiwari.
// A space optimized// based C# program// to print first n// Tribinocci numbers.using System; class GFG {         static void printTrib(int n)    {        if (n < 1)            return;             // Initialize first        // three numbers        int first = 0, second = 0;        int third = 1;             Console.Write(first + " ");        if (n > 1)        Console.Write(second + " ");                 if (n > 2)        Console.Write(second + " ");             // Loop to add previous        // three numbers for        // each number starting        // from 3 and then assign        // first, second, third        // to second, third, and curr        // to third respectively        for (int i = 3; i < n; i++)        {            int curr = first + second + third;            first = second;            second = third;            third = curr;                 Console.Write(curr +" ");        }    }         // Driver code    public static void Main()    {        int n = 10;        printTrib(n);    }} // This code is contributed by vt_m.
<?php// A space optimized// based PHP program to// print first n// Tribinocci numbers.| function printTrib($n){    if ($n < 1)        return;     // Initialize first    // three numbers    $first = 0; $second = 0;    $third = 1;     echo $first, " ";    if ($n > 1)        echo $second , " ";         if ($n > 2)        echo $second , " ";     // Loop to add previous    // three numbers for    // each number starting    // from 3 and then assign    // first, second, third    // to second, third, and    // curr to third respectively    for ($i = 3; $i < $n; $i++)    {        $curr = $first + $second + $third;        $first = $second;        $second = $third;        $third = $curr;         echo $curr , " ";    }}     // Driver code    $n = 10;    printTrib($n); // This code is contributed by m_kit?>
<script> // A space optimized// based Javascript program// to print first n// Tribonacci numbers.         function printTrib(n)    {        if (n < 1)            return;              // Initialize first        // three numbers        let first = 0, second = 0;        let third = 1;              document.write(first + " ");        if (n > 1)            document.write(second + " ");                  if (n > 2)            document.write(second + " ");              // Loop to add previous        // three numbers for        // each number starting        // from 3 and then assign        // first, second, third        // to second, third, and curr        // to third respectively        for (let i = 3; i < n; i++)        {            let curr = first + second + third;            first = second;            second = third;            third = curr;                  document.write(curr +" ");        }    }         // Driver code    let n = 10;    printTrib(n);         // This code is contributed by rag2127     </script>
0 0 0 1 2 4 7 13 24 44 
Below is more efficient solution using matrix exponentiation.  
C++
Java
Python 3
C#
PHP
Javascript
#include <iostream>using namespace std; // Program to print first n// tribonacci numbers Matrix// Multiplication function// for 3*3 matrixvoid multiply(int T[3][3], int M[3][3]){    int a, b, c, d, e, f, g, h, i;    a = T[0][0] * M[0][0] +        T[0][1] * M[1][0] +        T[0][2] * M[2][0];    b = T[0][0] * M[0][1] +        T[0][1] * M[1][1] +        T[0][2] * M[2][1];    c = T[0][0] * M[0][2] +        T[0][1] * M[1][2] +        T[0][2] * M[2][2];    d = T[1][0] * M[0][0] +        T[1][1] * M[1][0] +        T[1][2] * M[2][0];    e = T[1][0] * M[0][1] +        T[1][1] * M[1][1] +        T[1][2] * M[2][1];    f = T[1][0] * M[0][2] +        T[1][1] * M[1][2] +        T[1][2] * M[2][2];    g = T[2][0] * M[0][0] +        T[2][1] * M[1][0] +        T[2][2] * M[2][0];    h = T[2][0] * M[0][1] +        T[2][1] * M[1][1] +        T[2][2] * M[2][1];    i = T[2][0] * M[0][2] +        T[2][1] * M[1][2] +        T[2][2] * M[2][2];    T[0][0] = a;    T[0][1] = b;    T[0][2] = c;    T[1][0] = d;    T[1][1] = e;    T[1][2] = f;    T[2][0] = g;    T[2][1] = h;    T[2][2] = i;} // Recursive function to raise// the matrix T to the power nvoid power(int T[3][3], int n){    // base condition.    if (n == 0 || n == 1)        return;    int M[3][3] = {{ 1, 1, 1 },                   { 1, 0, 0 },                   { 0, 1, 0 }};     // recursively call to    // square the matrix    power(T, n / 2);     // calculating square    // of the matrix T    multiply(T, T);     // if n is odd multiply    // it one time with M    if (n % 2)        multiply(T, M);}int tribonacci(int n){    int T[3][3] = {{ 1, 1, 1 },                   { 1, 0, 0 },                   { 0, 1, 0 }};     // base condition    if (n == 0 || n == 1)        return 0;    else        power(T, n - 2);     // T[0][0] contains the    // tribonacci number so    // return it    return T[0][0];} // Driver Codeint main(){    int n = 10;    for (int i = 0; i < n; i++)        cout << tribonacci(i) << " ";    cout << endl;    return 0;}
// Java Program to print// first n tribonacci numbers// Matrix Multiplication// function for 3*3 matriximport java.io.*; class GFG{    static void multiply(int T[][], int M[][])    {        int a, b, c, d, e, f, g, h, i;        a = T[0][0] * M[0][0] +            T[0][1] * M[1][0] +            T[0][2] * M[2][0];        b = T[0][0] * M[0][1] +            T[0][1] * M[1][1] +            T[0][2] * M[2][1];        c = T[0][0] * M[0][2] +            T[0][1] * M[1][2] +            T[0][2] * M[2][2];        d = T[1][0] * M[0][0] +            T[1][1] * M[1][0] +            T[1][2] * M[2][0];        e = T[1][0] * M[0][1] +            T[1][1] * M[1][1] +            T[1][2] * M[2][1];        f = T[1][0] * M[0][2] +            T[1][1] * M[1][2] +            T[1][2] * M[2][2];        g = T[2][0] * M[0][0] +            T[2][1] * M[1][0] +            T[2][2] * M[2][0];        h = T[2][0] * M[0][1] +            T[2][1] * M[1][1] +            T[2][2] * M[2][1];        i = T[2][0] * M[0][2] +            T[2][1] * M[1][2] +            T[2][2] * M[2][2];        T[0][0] = a;        T[0][1] = b;        T[0][2] = c;        T[1][0] = d;        T[1][1] = e;        T[1][2] = f;        T[2][0] = g;        T[2][1] = h;        T[2][2] = i;    }         // Recursive function to raise    // the matrix T to the power n    static void power(int T[][], int n)    {        // base condition.        if (n == 0 || n == 1)            return;        int M[][] = {{ 1, 1, 1 },                     { 1, 0, 0 },                     { 0, 1, 0 }};             // recursively call to        // square the matrix        power(T, n / 2);             // calculating square        // of the matrix T        multiply(T, T);             // if n is odd multiply        // it one time with M        if (n % 2 != 0)            multiply(T, M);    }    static int tribonacci(int n)    {        int T[][] = {{ 1, 1, 1 },                     { 1, 0, 0 },                     { 0, 1, 0 }};             // base condition        if (n == 0 || n == 1)            return 0;        else            power(T, n - 2);             // T[0][0] contains the        // tribonacci number so        // return it        return T[0][0];    }         // Driver Code    public static void main(String args[])    {        int n = 10;        for (int i = 0; i < n; i++)        System.out.print(tribonacci(i) + " ");        System.out.println();    }} // This code is contributed by Nikita Tiwari.
# Program to print first n tribonacci# numbers Matrix Multiplication# function for 3*3 matrixdef multiply(T, M):         a = (T[0][0] * M[0][0] + T[0][1] *         M[1][0] + T[0][2] * M[2][0])                b = (T[0][0] * M[0][1] + T[0][1] *         M[1][1] + T[0][2] * M[2][1])    c = (T[0][0] * M[0][2] + T[0][1] *         M[1][2] + T[0][2] * M[2][2])    d = (T[1][0] * M[0][0] + T[1][1] *         M[1][0] + T[1][2] * M[2][0])    e = (T[1][0] * M[0][1] + T[1][1] *         M[1][1] + T[1][2] * M[2][1])    f = (T[1][0] * M[0][2] + T[1][1] *         M[1][2] + T[1][2] * M[2][2])    g = (T[2][0] * M[0][0] + T[2][1] *         M[1][0] + T[2][2] * M[2][0])    h = (T[2][0] * M[0][1] + T[2][1] *         M[1][1] + T[2][2] * M[2][1])    i = (T[2][0] * M[0][2] + T[2][1] *         M[1][2] + T[2][2] * M[2][2])                 T[0][0] = a    T[0][1] = b    T[0][2] = c    T[1][0] = d    T[1][1] = e    T[1][2] = f    T[2][0] = g    T[2][1] = h    T[2][2] = i # Recursive function to raise# the matrix T to the power ndef power(T, n):     # base condition.    if (n == 0 or n == 1):        return;    M = [[ 1, 1, 1 ],                [ 1, 0, 0 ],                [ 0, 1, 0 ]]     # recursively call to    # square the matrix    power(T, n // 2)     # calculating square    # of the matrix T    multiply(T, T)     # if n is odd multiply    # it one time with M    if (n % 2):        multiply(T, M) def tribonacci(n):         T = [[ 1, 1, 1 ],        [1, 0, 0 ],        [0, 1, 0 ]]     # base condition    if (n == 0 or n == 1):        return 0    else:        power(T, n - 2)     # T[0][0] contains the    # tribonacci number so    # return it    return T[0][0] # Driver Codeif __name__ == "__main__":    n = 10    for i in range(n):        print(tribonacci(i),end=" ")    print() # This code is contributed by ChitraNayal
// C# Program to print// first n tribonacci numbers// Matrix Multiplication// function for 3*3 matrixusing System; class GFG{    static void multiply(int [,]T,                         int [,]M)    {        int a, b, c, d, e, f, g, h, i;        a = T[0,0] * M[0,0] +            T[0,1] * M[1,0] +            T[0,2] * M[2,0];        b = T[0,0] * M[0,1] +            T[0,1] * M[1,1] +            T[0,2] * M[2,1];        c = T[0,0] * M[0,2] +            T[0,1] * M[1,2] +            T[0,2] * M[2,2];        d = T[1,0] * M[0,0] +            T[1,1] * M[1,0] +            T[1,2] * M[2,0];        e = T[1,0] * M[0,1] +            T[1,1] * M[1,1] +            T[1,2] * M[2,1];        f = T[1,0] * M[0,2] +            T[1,1] * M[1,2] +            T[1,2] * M[2,2];        g = T[2,0] * M[0,0] +            T[2,1] * M[1,0] +            T[2,2] * M[2,0];        h = T[2,0] * M[0,1] +            T[2,1] * M[1,1] +            T[2,2] * M[2,1];        i = T[2,0] * M[0,2] +            T[2,1] * M[1,2] +            T[2,2] * M[2,2];        T[0,0] = a;        T[0,1] = b;        T[0,2] = c;        T[1,0] = d;        T[1,1] = e;        T[1,2] = f;        T[2,0] = g;        T[2,1] = h;        T[2,2] = i;    }         // Recursive function to raise    // the matrix T to the power n    static void power(int [,]T, int n)    {        // base condition.        if (n == 0 || n == 1)            return;        int [,]M = {{ 1, 1, 1 },                    { 1, 0, 0 },                    { 0, 1, 0 }};             // recursively call to        // square the matrix        power(T, n / 2);             // calculating square        // of the matrix T        multiply(T, T);             // if n is odd multiply        // it one time with M        if (n % 2 != 0)            multiply(T, M);    }         static int tribonacci(int n)    {        int [,]T = {{ 1, 1, 1 },                    { 1, 0, 0 },                    { 0, 1, 0 }};             // base condition        if (n == 0 || n == 1)            return 0;        else            power(T, n - 2);             // T[0][0] contains the        // tribonacci number so        // return it        return T[0,0];    }         // Driver Code    public static void Main()    {        int n = 10;        for (int i = 0; i < n; i++)        Console.Write(tribonacci(i) + " ");        Console.WriteLine();    }} // This code is contributed by vt_m.
<?php// Program to print first n tribonacci numbers// Matrix Multiplication function for 3*3 matrixfunction multiply(&$T, $M){    $a = $T[0][0] * $M[0][0] +         $T[0][1] * $M[1][0] +         $T[0][2] * $M[2][0];    $b = $T[0][0] * $M[0][1] +         $T[0][1] * $M[1][1] +         $T[0][2] * $M[2][1];    $c = $T[0][0] * $M[0][2] +         $T[0][1] * $M[1][2] +         $T[0][2] * $M[2][2];    $d = $T[1][0] * $M[0][0] +         $T[1][1] * $M[1][0] +         $T[1][2] * $M[2][0];    $e = $T[1][0] * $M[0][1] +         $T[1][1] * $M[1][1] +         $T[1][2] * $M[2][1];    $f = $T[1][0] * $M[0][2] +         $T[1][1] * $M[1][2] +         $T[1][2] * $M[2][2];    $g = $T[2][0] * $M[0][0] +         $T[2][1] * $M[1][0] +         $T[2][2] * $M[2][0];    $h = $T[2][0] * $M[0][1] +         $T[2][1] * $M[1][1] +         $T[2][2] * $M[2][1];    $i = $T[2][0] * $M[0][2] +         $T[2][1] * $M[1][2] +         $T[2][2] * $M[2][2];    $T[0][0] = $a;    $T[0][1] = $b;    $T[0][2] = $c;    $T[1][0] = $d;    $T[1][1] = $e;    $T[1][2] = $f;    $T[2][0] = $g;    $T[2][1] = $h;    $T[2][2] = $i;} // Recursive function to raise// the matrix T to the power nfunction power(&$T,$n){    // base condition.    if ($n == 0 || $n == 1)        return;    $M = array(array( 1, 1, 1 ),               array( 1, 0, 0 ),               array( 0, 1, 0 ));     // recursively call to    // square the matrix    power($T, (int)($n / 2));     // calculating square    // of the matrix T    multiply($T, $T);     // if n is odd multiply    // it one time with M    if ($n % 2)        multiply($T, $M);} function tribonacci($n){    $T = array(array( 1, 1, 1 ),               array( 1, 0, 0 ),               array( 0, 1, 0 ));     // base condition    if ($n == 0 || $n == 1)        return 0;    else        power($T, $n - 2);     // $T[0][0] contains the tribonacci    // number so return it    return $T[0][0];} // Driver Code$n = 10;for ($i = 0; $i < $n; $i++)    echo tribonacci($i) . " ";echo "\n"; // This code is contributed by mits?>
<script> // javascript Program to print// first n tribonacci numbers// Matrix Multiplication// function for 3*3 matrix     function multiply(T , M)    {        var a, b, c, d, e, f, g, h, i;        a = T[0][0] * M[0][0] +            T[0][1] * M[1][0] +            T[0][2] * M[2][0];        b = T[0][0] * M[0][1] +            T[0][1] * M[1][1] +            T[0][2] * M[2][1];        c = T[0][0] * M[0][2] +            T[0][1] * M[1][2] +            T[0][2] * M[2][2];        d = T[1][0] * M[0][0] +            T[1][1] * M[1][0] +            T[1][2] * M[2][0];        e = T[1][0] * M[0][1] +            T[1][1] * M[1][1] +            T[1][2] * M[2][1];        f = T[1][0] * M[0][2] +            T[1][1] * M[1][2] +            T[1][2] * M[2][2];        g = T[2][0] * M[0][0] +            T[2][1] * M[1][0] +            T[2][2] * M[2][0];        h = T[2][0] * M[0][1] +            T[2][1] * M[1][1] +            T[2][2] * M[2][1];        i = T[2][0] * M[0][2] +            T[2][1] * M[1][2] +            T[2][2] * M[2][2];        T[0][0] = a;        T[0][1] = b;        T[0][2] = c;        T[1][0] = d;        T[1][1] = e;        T[1][2] = f;        T[2][0] = g;        T[2][1] = h;        T[2][2] = i;    }         // Recursive function to raise    // the matrix T to the power n    function power(T , n)    {        // base condition.        if (n == 0 || n == 1)            return;        var M = [[ 1, 1, 1 ],                     [ 1, 0, 0 ],                     [ 0, 1, 0 ]];             // recursively call to        // square the matrix        power(T, parseInt(n / 2));             // calculating square        // of the matrix T        multiply(T, T);             // if n is odd multiply        // it one time with M        if (n % 2 != 0)            multiply(T, M);    }    function tribonacci(n)    {        var T = [[ 1, 1, 1 ],                     [ 1, 0, 0 ],                     [ 0, 1, 0 ]];             // base condition        if (n == 0 || n == 1)            return 0;        else            power(T, n - 2);             // T[0][0] contains the        // tribonacci number so        // return it        return T[0][0];    }         // Driver Code    var n = 10;    for (var i = 0; i < n; i++)    document.write(tribonacci(i) + " ");    document.write('<br>');  // This code contributed by shikhasingrajput</script>
0 0 1 1 2 4 7 13 24 44 

This article is contributed by Sahil Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
Kamal_Singh
jit_t
ukasp
Mithun Kumar
_saurabh_jaiswal
code_hunt
rag2127
bunnyram19
shikhasingrajput
prasanna1995
indradeep0312
series
Mathematical
Mathematical
series
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Algorithm to solve Rubik's Cube
Program to print prime numbers from 1 to N.
Merge two sorted arrays with O(1) extra space
Segment Tree | Set 1 (Sum of given range)
Fizz Buzz Implementation
Check if a number is Palindrome
Count ways to reach the n'th stair
Product of Array except itself
Find Union and Intersection of two unsorted arrays
Median of two sorted arrays of same size