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,
// 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;
} |
// 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 code n = 10
printTrib(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 ?> |
// 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 |
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:
// 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;
} |
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 = ' ' )
|
// 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 |
// 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 |
0 0 1 1 2 4 7 13 24
2) Bottom-Up DP Tabulation:
// 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;
} |
// 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 code n = 10
printTrib(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.
// 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;
} |
// 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 code n = 10
printTrib(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.
#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 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. |
# 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# 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 // 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 ?> |
<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