# 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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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 ` ` `  `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` `ji: ` `        ``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)) `

Output:

```12
```

My Personal Notes arrow_drop_up Interested in Algorithms and Data Structures

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.