Open In App
Related Articles

Tribonacci Numbers

Improve Article
Improve
Save Article
Save
Like Article
Like

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 on
General 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++




// 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 code
int main()
{
    int n = 10;
    printTrib(n);
    return 0;
}


Java




// 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.


Python




# 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 code
n = 10
printTrib(n)
 
 
# This code is contributed by Nikita Tiwari.


C#




// 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




<?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
?>


Javascript




<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>


Output

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++




// 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 code
int main()
{
    int n = 10;
    printTrib(n);
    return 0;
}


Python3




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=10
for i in range(n):
    print(tribonacci(i),end=' ')


Javascript




// A simple recursive JS program to print
// first n Tribonacci numbers.
 
function printTribRec(n, 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);
}
 
function printTrib(n)
{
    // dp vector to store subproblems
    let dp = new Array(n+1).fill(-1) ;
    for (var i = 1; i < n; i++)
        process.stdout.write(printTribRec(i, dp) + " ");
}
 
// Driver code
let n = 10;
printTrib(n);
 
 
// This code is contributed by phasing17


C#




// A simple recursive C# program to print
// first n Tribonacci numbers.
 
using System;
using System.Collections.Generic;
 
class GFG {
    static int printTribRec(int n, List<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);
    }
 
    static void printTrib(int n)
    {
        // dp vector to store subproblems
        List<int> dp = new List<int>();
        for (var i = 0; i <= n; i++)
            dp.Add(-1);
        for (int i = 1; i < n; i++)
            Console.Write(printTribRec(i, dp) + " ");
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        int n = 10;
        printTrib(n);
    }
}
 
// This code is contributed by phasing17


Java




// A simple recursive Java program to print
// first n Tribonacci numbers.
 
import java.util.*;
 
 
class GFG {
    static int printTribRec(int n, 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);
    }
 
    static void printTrib(int n)
    {
        // dp vector to store subproblems
        int[] dp = new int[n + 1];
        for (var i = 0; i <= n; i++)
            dp[i] = -1;
        for (int i = 1; i < n; i++)
            System.out.print(printTribRec(i, dp) + " ");
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int n = 10;
        printTrib(n);
    }
}
 
// This code is contributed by phasing17


Output

0 0 1 1 2 4 7 13 24 

2) Bottom-Up DP Tabulation:
 

C++




// 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 code
int main()
{
    int n = 10;
    printTrib(n);
    return 0;
}


Java




// 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.*/


Python3




# 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 code
n = 10
printTrib(n)
 
# This code is contributed by Nikita Tiwari.


C#




// 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




<?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
?>


Javascript




<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>   


Output

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++




// 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 code
int main()
{
    int n = 10;
    printTrib(n);
    return 0;
}


Java




// 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.


Python3




# 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 code
n = 10
printTrib(n)
 
# This code is contributed by Nikita Tiwari.


C#




// 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




<?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
?>


Javascript




<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>


Output

0 0 0 1 2 4 7 13 24 44 

Below is more efficient solution using matrix exponentiation
 

C++




#include <iostream>
using namespace std;
 
// Program to print first n
// tribonacci numbers Matrix
// Multiplication function
// for 3*3 matrix
void 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 n
void 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 Code
int main()
{
    int n = 10;
    for (int i = 0; i < n; i++)
        cout << tribonacci(i) << " ";
    cout << endl;
    return 0;
}


Java




// Java Program to print
// first n tribonacci numbers
// Matrix Multiplication
// function for 3*3 matrix
import 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.


Python 3




# Program to print first n tribonacci
# numbers Matrix Multiplication
# function for 3*3 matrix
def 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 n
def 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 Code
if __name__ == "__main__":
    n = 10
    for i in range(n):
        print(tribonacci(i),end=" ")
    print()
 
# This code is contributed by ChitraNayal


C#




// C# Program to print
// first n tribonacci numbers
// Matrix Multiplication
// function for 3*3 matrix
using 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




<?php
// Program to print first n tribonacci numbers
// Matrix Multiplication function for 3*3 matrix
function 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 n
function 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
?>


Javascript




<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>


Output

0 0 1 1 2 4 7 13 24 44 

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.
 


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 29 Jul, 2022
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials