N-th Tribonacci Number

Updated on 01 July, 2025
N-th Tribonacci Number header image

Problem Statement

The Tribonacci sequence is a series where each number (or term) after the first three is the sum of the preceding three terms. The sequence starts with ( T_0 = 0 ), ( T_1 = 1 ), and ( T_2 = 1 ). Subsequent terms are defined by the relationship ( T_{n+3} = T_n + T_{n+1} + T_{n+2} ) for ( n ) greater than or equal to 0. Given a number ( n ), the task is to compute and return the ( n )th value of the Tribonacci sequence, denoted as ( T_n ).

Examples

Example 1

Input:

n = 4

Output:

4

Explanation:

T_3 = 0 + 1 + 1 = 2
T_4 = 1 + 1 + 2 = 4

Example 2

Input:

n = 25

Output:

1389537

Constraints

  • 0 <= n <= 37
  • The answer is guaranteed to fit within a 32-bit integer, ie. answer <= 2^31 - 1.

Approach and Intuition

The Tribonacci sequence, inspired by the Fibonacci series, expands on the concept by summing the last three terms instead of two. Understanding the problem through the given examples can elucidate the approach:

Example Analysis

  1. Understanding the Sequence Expansion:
    • For ( n = 4 ):
      • Build from known initial values: ( T_3 = T_0 + T_1 + T_2 = 0 + 1 + 1 = 2 )
      • Then, ( T_4 = T_1 + T_2 + T_3 = 1 + 1 + 2 = 4 )
      • Hence the output is 4.
    • For ( n = 25 ):
      • This would require iterating or recursively calculating up to the 25th term starting from the initial defined terms ( T_0, T_1, T_2 ).
      • The output for ( T_{25} ) is 1389537 given the sum of the previous three terms up to that point.

Intuition and Algorithm Steps:

The operation ( T_{n+3} = T_n + T_{n+1} + T_{n+2} ) suggests the use of an iterative approach or dynamic programming to store previously computed terms for efficient computation:

  1. Begin by defining the base cases:
    • ( T_0 = 0 ), ( T_1 = 1 ), ( T_2 = 1 )
  2. Use a loop to fill in the subsequent terms from 3 to ( n ) using the values of the three preceding terms.
  3. For each iteration ( i ) from 3 to ( n ), update the value at ( T_i ) as ( T_{i-3} + T_{i-2} + T_{i-1} ).
  4. The final value ( T_n ) is directly returned at the end of the computation.

Constraints management:

  • Values of ( n ) range between 0 and 37, ensuring computation remains manageable within the fixed iterations.
  • Storing only the necessary terms or even the last three terms in each step can optimize space usage while aligning with the 32-bit integer limits on the results.

Solutions

  • C++
  • Java
  • Python
cpp
class Solution {
public:
    int tribonacci(int n) {
        if (n < 3) {
            return n == 0 ? 0 : 1;
        }
            
        vector<int> trib(n + 1, 0);
        trib[1] = 1;
        trib[2] = 1;
            
        for (int i = 3; i <= n; ++i) {
            trib[i] = trib[i - 1] + trib[i - 2] + trib[i - 3];
        }
            
        return trib[n];
    }
};

The provided code snippet is a C++ solution designed to calculate the N-th number in the Tribonacci sequence. The Tribonacci sequence is a generalization of the Fibonacci sequence where each number is the sum of the three preceding ones.

Here’s a concise explanation of the approach and method used in the solution:

  • Check for base cases:
    • Return 0 if n is 0.
    • Return 1 if n is 1 or 2.
  • Initialize a vector, trib, that supports up to n elements and set default values to 0.
  • Set initial known values:
    • trib[1] and trib[2] to 1.
  • Iterate from 3 to n:
    • Update trib[i] to be the sum of the three preceding elements: trib[i-1], trib[i-2], and trib[i-3].
  • Finally, return trib[n], which contains the N-th Tribonacci number.

This solution effectively utilizes dynamic programming to build up to the required N-th number by storing previously computed values, thus avoiding the exponential time complexity of a naive recursive approach. The utilization of a vector ensures that each number is computed only once.

java
class Solution {
    public int tribonacciNumber(int num) {
        if (num < 3) {
            return num == 0 ? 0 : 1;
        }
            
        int[] sequence = new int[num + 1];
        sequence[1] = 1;
        sequence[2] = 1;
            
        for (int index = 3; index <= num; ++index) {
            sequence[index] = sequence[index - 1] + sequence[index - 2] + sequence[index - 3];
        }
            
        return sequence[num];
    }
}

This Java solution efficiently computes the N-th tribonacci number using dynamic programming. The tribonacci sequence, like the Fibonacci sequence, starts with certain fixed numbers and each subsequent number is the sum of the three preceding numbers. The method tribonacciNumber(int num) determines this N-th number in the sequence.

  • The method starts by handling the base cases:
    • If num is less than 3, the method returns 0 for num == 0 and 1 for num == 1 or 2.
  • It initializes an array sequence to store computed tribonacci numbers, thereby avoiding redundant calculations with each function call.
  • The array is pre-populated with values for sequence[1] and sequence[2] both set to 1, considering the sequence definition.
  • A for-loop then iterates from 3 to num, computing the tribonacci number at each position by summing the three immediately preceding numbers in the sequence.
  • Finally, the method returns the value at sequence[num], which contains the N-th tribonacci number.

This approach leverages the dynamic programming principle of overlapping subproblems, ensuring the calculation is efficient and optimal. Memory usage is linear in terms of the input size num, making it a scalable solution. With this solution, compute any desired N-th number in the tribonacci sequence by passing the appropriate number to the tribonacciNumber method.

python
class Result:
    def trib(self, N: int) -> int:
        if N < 3:
            return 1 if N else 0
        result = [0] * (N + 1)
        result[1], result[2] = 1, 1
        for index in range(3, N + 1):
            result[index] = result[index - 1] + result[index - 2] + result[index - 3]
        return result[N]

The provided Python function calculates the N-th number in the Tribonacci sequence, which is a variation of the Fibonacci sequence where each number is the sum of the three preceding ones. This program, encapsulated within a class Result, includes a method trib that determines the Tribonacci value at position N.

  • The method starts by managing base cases: if N is less than 3, it returns 1 for N equals 1 or 2, and returns 0 for N equals 0.
  • To store the Tribonacci numbers, the function initializes a list called result with a size of N + 1, prefilling the values of result[1], and result[2] to 1 since the first two nonzero elements of the Tribonacci series are both 1.
  • A loop then computes each subsequent Tribonacci number from the 3rd to the N-th by summing the three previous numbers in the sequence.
  • The function returns the value result[N] to output the N-th Tribonacci number.

Optimized for readability and efficiency, the function prepares for large values of N by using a dynamic programming approach that stores previously calculated values in an array. This avoids redundant calculations, making the method scalable and fast for larger inputs.

Comments

No comments yet.