Sunday, January 12, 2025
Google search engine
HomeData Modelling & AIFind F(n) when F(i) and F(j) of a sequence are given

Find F(n) when F(i) and F(j) of a sequence are given

Given five integers i, Fi, j, Fj and N. Where Fi and Fj are the ith and jth term of a sequence which follows the Fibonacci recurrence i.e. FN = FN – 1 + FN – 2. The task is to find the Nth term of the original sequence.
Examples: 
 

Input: i = 3, F3 = 5, j = -1, F-1 = 4, N = 5 
Output: 12 
Fibonacci sequence can be reconstructed using known values: 
…, F-1 = 4, F0 = -1, F1 = 3, F2 = 2, F3 = 5, F4 = 7, F5 = 12, …
Input: i = 0, F0 = 1, j = 1, F1 = 4, N = -2 
Output: -2 
 

 

Approach: Note that, if the two consecutive terms of the Fibonacci sequence are known then the Nth term can easily be determined. Assuming i < j, as per Fibonacci condition: 
 

  Fi+1 = 1*Fi+1 + 0*Fi 
  Fi+2 = 1*Fi+1 + 1*Fi 
  Fi+3 = Fi+2 + Fi+1 = 2*Fi+1 + 1*Fi 
  Fi+4 = Fi+3 + Fi+2 = 3*Fi+1 + 2*Fi 
  Fi+5 = Fi+4 + Fi+3 = 5*Fi+1 + 3*Fi 
  .. .. .. 
and so on 
 

Note that, the coefficients of Fi+1 and Fi in the above set of equations are nothing but the terms of Standard Fibonacci Sequence.
So, considering the Standard Fibonacci sequence i.e. f0 = 0, f1 = 1, f2 = 1, f3 = 2, f4 = 3, … ; we can generalize, the above set of equations (for k > 0) as: 
 

  Fi+k = fk*Fi+1 + fk-1*Fi   …(1) 
 

Now consider, 
 

  k = j-i   …(2) 
 

Now, substituting eq.(2) in eq.(1), we get: 
 

  Fj = fj-i*Fi+1 + fj-i-1*Fi 
 

Hence, we can calculate Fi+1 from known values of Fi and Fj. Now that we know two consecutive terms of sequence F, we can easily reconstruct F and determine the value of FN.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include<bits/stdc++.h>
 
using namespace std;
 
// Function to calculate kth Fibonacci number
// in the standard Fibonacci sequence
int fibonacci(int k)
{
    int a = 0, b = 1, c = 0;
    if( k == 0)
        return a;
    if (k == 1)
        return b;
    for(int i = 2; i < k + 1; i++)
    {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}
 
// Function to determine the value of F(n)
int determineFn(int i, int Fi, int j, int Fj, int n)
{
    if (j < i)
    {
        swap(i, j);
        swap(Fi, Fj);
    }
 
    // Find the value of F(i + 1)
    // from F(i) and F(j)
    int Fi1 = (Fj - fibonacci(j - i - 1) * Fi) /
                    fibonacci(j - i);
 
    // When n is equal to i
    int Fn = 0;
    if (n == i)
        Fn = Fi;
 
    // When n is greater than i
    else if (n > i)
    {
        int b = Fi;
        Fn = Fi1;
        n = n - 1;
        while (n != i)
        {
            n = n - 1;
            int a = b;
            b = Fn;
            Fn = a + b;
        }
    }
     
    // When n is smaller than i
    else
    {
        int a = Fi;
        int b = Fi1;
        while (n != i)
        {
            n = n + 1;
            Fn = b - a;
            b = a;
            a = Fn;
        }
    }
    return Fn;
}
 
// Driver code
int main()
{
    int i = 3;
    int Fi = 5;
    int j = -1;
    int Fj = 4;
    int n = 5;
    cout << (determineFn(i, Fi, j, Fj, n));
}
 
// This code is contributed by Mohit Kumar


Java




// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
    // Function to calculate kth Fibonacci number
    // in the standard Fibonacci sequence
    static int fibonacci(int k)
    {
        int a = 0, b = 1, c = 0;
        if (k == 0)
            return a;
        if (k == 1)
            return b;
        for (int i = 2; i < k + 1; i++)
        {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
 
    // Function to determine the value of F(n)
    static int determineFn(int i, int Fi,      
                           int j, int Fj, int n)
    {
        if (j < i)
        {
 
            // Swap i, j
            i = i + j;
            j = i - j;
            i = i - j;
 
            // swap Fi, Fj
            Fi = Fi + Fj;
            Fj = Fi - Fj;
            Fi = Fi - Fj;
        }
 
        // Find the value of F(i + 1)
        // from F(i) and F(j)
        int Fi1 = (Fj - fibonacci(j - i - 1) * Fi) /
                        fibonacci(j - i);
 
        // When n is equal to i
        int Fn = 0;
        if (n == i)
            Fn = Fi;
 
        // When n is greater than i
        else if (n > i)
        {
            int b = Fi;
            Fn = Fi1;
            n = n - 1;
            while (n != i)
            {
                n = n - 1;
                int a = b;
                b = Fn;
                Fn = a + b;
            }
        }
 
        // When n is smaller than i
        else
        {
            int a = Fi;
            int b = Fi1;
            while (n != i)
            {
                n = n + 1;
                Fn = b - a;
                b = a;
                a = Fn;
            }
        }
        return Fn;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int i = 3;
        int Fi = 5;
        int j = -1;
        int Fj = 4;
        int n = 5;
        System.out.println(determineFn(i, Fi, j, Fj, n));
    }
}
 
// This code is contributed by
// sanjeev2552


Python3




# Python3 implementation of the approach
 
# Function to calculate kth Fibonacci number
# in the standard Fibonacci sequence
def fibonacci(k):
    a = 0
    b = 1
    if k == 0:
        return a
    if k == 1:
        return b
    for i in range(2, k + 1):
        c = a + b
        a = b
        b = c
    return c
 
# Function to determine
# the value of F(n)
def determineFn(i, Fi, j, Fj, n):
    if j<i:
        i, j = j, i
        Fi, Fj = Fj, Fi
 
    # Find the value of F(i + 1)
    # from F(i) and F(j)
    Fi1 = (Fj - fibonacci(j-i-1)*Fi)\
                      //fibonacci(j-i)
 
    # When n is equal to i
    if n == i:
        Fn = Fi
 
    # When n is greater than i
    elif n>i:
        b = Fi
        Fn = Fi1
        n = n - 1
        while n != i:
            n = n - 1
            a = b
            b = Fn
            Fn = a + b
 
    # When n is smaller than i
    else:
        a = Fi
        b = Fi1
        while n != i:
            n = n + 1
            Fn = b - a
            b = a
            a = Fn
    return Fn
 
# Driver code
if __name__ == '__main__':
    i = 3
    Fi = 5
    j = -1
    Fj = 4
    n = 5
    print(determineFn(i, Fi, j, Fj, n))


C#




// C# implementation of the approach
using System;
 
class GFG
{
 
    // Function to calculate kth Fibonacci number
    // in the standard Fibonacci sequence
    static int fibonacci(int k)
    {
        int a = 0, b = 1, c = 0;
        if (k == 0)
            return a;
        if (k == 1)
            return b;
        for (int i = 2; i < k + 1; i++)
        {
            c = a + b;
            a = b;
            b = c;
        }
        return c;
    }
 
    // Function to determine the value of F(n)
    static int determineFn(int i, int Fi,    
                           int j, int Fj, int n)
    {
        if (j < i)
        {
 
            // Swap i, j
            i = i + j;
            j = i - j;
            i = i - j;
 
            // swap Fi, Fj
            Fi = Fi + Fj;
            Fj = Fi - Fj;
            Fi = Fi - Fj;
        }
 
        // Find the value of F(i + 1)
        // from F(i) and F(j)
        int Fi1 = (Fj - fibonacci(j - i - 1) * Fi) /
                        fibonacci(j - i);
 
        // When n is equal to i
        int Fn = 0;
        if (n == i)
            Fn = Fi;
 
        // When n is greater than i
        else if (n > i)
        {
            int b = Fi;
            Fn = Fi1;
            n = n - 1;
            while (n != i)
            {
                n = n - 1;
                int a = b;
                b = Fn;
                Fn = a + b;
            }
        }
 
        // When n is smaller than i
        else
        {
            int a = Fi;
            int b = Fi1;
            while (n != i)
            {
                n = n + 1;
                Fn = b - a;
                b = a;
                a = Fn;
            }
        }
        return Fn;
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        int i = 3;
        int Fi = 5;
        int j = -1;
        int Fj = 4;
        int n = 5;
        Console.WriteLine(determineFn(i, Fi, j, Fj, n));
    }
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to calculate kth Fibonacci number
// in the standard Fibonacci sequence
function fibonacci(k)
{
    let a = 0, b = 1, c = 0;
    if( k == 0)
        return a;
    if (k == 1)
        return b;
    for(let i = 2; i < k + 1; i++)
    {
        c = a + b;
        a = b;
        b = c;
    }
    return c;
}
 
// Function to determine the value of F(n)
function determineFn(i, Fi, j, Fj, n)
{
    if (j < i)
    {
        // Swap i, j
        i = i + j;
        j = i - j;
        i = i - j;
 
        // swap Fi, Fj
        Fi = Fi + Fj;
        Fj = Fi - Fj;
        Fi = Fi - Fj;
    }
 
    // Find the value of F(i + 1)
    // from F(i) and F(j)
    let Fi1 = parseInt((Fj - fibonacci(j - i - 1) * Fi) /
                    fibonacci(j - i));
 
    // When n is equal to i
    let Fn = 0;
    if (n == i)
        Fn = Fi;
 
    // When n is greater than i
    else if (n > i)
    {
        let b = Fi;
        Fn = Fi1;
        n = n - 1;
        while (n != i)
        {
            n = n - 1;
            let a = b;
            b = Fn;
            Fn = a + b;
        }
    }
     
    // When n is smaller than i
    else
    {
        let a = Fi;
        let b = Fi1;
        while (n != i)
        {
            n = n + 1;
            Fn = b - a;
            b = a;
            a = Fn;
        }
    }
    return Fn;
}
 
// Driver code
    let i = 3;
    let Fi = 5;
    let j = -1;
    let Fj = 4;
    let n = 5;
    document.write(determineFn(i, Fi, j, Fj, n));
 
</script>


Output: 

12

 

Time Complexity: O(n)

Auxiliary Space: O(1)

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

RELATED ARTICLES

Most Popular

Recent Comments