Geek-onacci Number
Last Updated :
29 Aug, 2023
Given four integers A, B, C and N, where A, B, C represents the first three numbers of the geekonacci series, the task is to find the Nth term of the geekonacci series.
The Nth term of the geekonacci series is the sum of its previous three terms in the series i.e., sum of (N – 1)th, (N – 2)th, and (N – 3)th geekonacci numbers.
Examples:
Input: A = 1, B = 3, C = 2, N = 4
Output: 6
Explanation: The geekonacci series is 1, 3, 2, 6, 11, 19, ……
Therefore, the 4th geekonacci number is 6.
Input: A = 1, B = 3, C = 2, N = 6
Output: 19
Recursive Approach: The ‘find'
function is implemented using recursion to calculate the Nth term of the geekonacci series. Let’s understand how the recursion works step by step:
- if N==1, then return A.
- if N==2, then return B.
- if N==3, then return C.
- If N > 3, recursively call find(A, B, C, N – 1) +find(A, B, C, N – 2) +find(A, B, C, N – 3).
- Finally, the function returns the sum of the three recursive calls, which represents the Nth term of the geekonacci series.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
int find( int A, int B, int C, int N)
{
if (N == 1)
return A;
else if (N == 2)
return B;
else if (N == 3)
return C;
return find(A, B, C, N - 1) +
find(A, B, C, N - 2) +
find(A, B, C, N - 3);
}
int main()
{
int A = 1, B = 3, C = 2, N = 4;
int result = find(A, B, C, N);
cout << result << endl;
return 0;
}
|
C
#include <stdio.h>
int find( int A, int B, int C, int N)
{
if (N == 1)
return A;
else if (N == 2)
return B;
else if (N == 3)
return C;
return find(A, B, C, N - 1) +
find(A, B, C, N - 2) +
find(A, B, C, N - 3);
}
int main()
{
int A = 1, B = 3, C = 2, N = 4;
int result = find(A, B, C, N);
printf ( "%d\n" , result);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int find( int A, int B, int C, int N)
{
if (N == 1 )
return A;
else if (N == 2 )
return B;
else if (N == 3 )
return C;
return find(A, B, C, N - 1 ) +
find(A, B, C, N - 2 ) +
find(A, B, C, N - 3 );
}
public static void main(String args[])
{
int A = 1 , B = 3 , C = 2 , N = 4 ;
int result = find(A, B, C, N);
System.out.println(result);
}
}
|
Python3
def find(A, B, C, N):
if N = = 1 :
return A
elif N = = 2 :
return B
elif N = = 3 :
return C
return find(A, B, C, N - 1 ) + find(A, B, C, N - 2 ) + find(A, B, C, N - 3 )
A = 1
B = 3
C = 2
N = 4
result = find(A, B, C, N)
print (result)
|
C#
using System;
public class Gfg{
static int find( int A, int B, int C, int N)
{
if (N == 1)
return A;
else if (N == 2)
return B;
else if (N == 3)
return C;
return find(A, B, C, N - 1) +
find(A, B, C, N - 2) +
find(A, B, C, N - 3);
}
public static void Main( string [] args)
{
int A = 1, B = 3, C = 2, N = 4;
int result = find(A, B, C, N);
Console.Write(result);
}
}
|
Javascript
function find(A, B, C, N) {
if (N == 1)
return A;
else if (N == 2)
return B;
else if (N == 3)
return C;
return find(A, B, C, N - 1) + find(A, B, C, N - 2) + find(A, B, C, N - 3);
}
const A = 1, B = 3, C = 2, N = 4;
const result = find(A, B, C, N);
console.log(result);
|
Time Complexity: O(3^n)
Auxiliary Space: O(n)
Approach: The given problem can be solved by generating the geekonacci series upto N terms and print the Nth term of the series obtained. Follow the steps below to solve this problem:
- Initialize an array arr[] of size N and initialize arr[0] = A, arr[1] = B, and arr[2] = C.
- Iterate over the range [3, N – 1] and update the value of each every ith element, i.e. arr[i] as (arr[i – 1] + arr[i – 2] + arr[i – 3]) to get the ith term of the geekonacci series.
- After completing the above steps, print the value of arr[N – 1] as the resultant Nth number of the geekonacci series.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int find( int A, int B,
int C, int N)
{
int arr[N];
arr[0] = A;
arr[1] = B;
arr[2] = C;
for ( int i = 3; i < N; i++) {
arr[i] = arr[i - 1]
+ arr[i - 2]
+ arr[i - 3];
}
return arr[N - 1];
}
int main()
{
int A = 1, B = 3, C = 2, N = 4;
cout<<(find(A, B, C, N));
return 0;
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
static int find( int A, int B,
int C, int N)
{
int [] arr = new int [N];
arr[ 0 ] = A;
arr[ 1 ] = B;
arr[ 2 ] = C;
for ( int i = 3 ; i < N; i++) {
arr[i] = arr[i - 1 ]
+ arr[i - 2 ]
+ arr[i - 3 ];
}
return arr[N - 1 ];
}
public static void main(String[] args)
{
int A = 1 , B = 3 , C = 2 , N = 4 ;
System.out.print(find(A, B, C, N));
}
}
|
Python3
def find(A, B, C, N) :
arr = [ 0 ] * N
arr[ 0 ] = A
arr[ 1 ] = B
arr[ 2 ] = C
for i in range ( 3 , N):
arr[i] = (arr[i - 1 ]
+ arr[i - 2 ]
+ arr[i - 3 ])
return arr[N - 1 ]
A = 1
B = 3
C = 2
N = 4
print (find(A, B, C, N))
|
C#
using System;
class GFG{
static int find( int A, int B,
int C, int N)
{
int [] arr = new int [N];
arr[0] = A;
arr[1] = B;
arr[2] = C;
for ( int i = 3; i < N; i++) {
arr[i] = arr[i - 1]
+ arr[i - 2]
+ arr[i - 3];
}
return arr[N - 1];
}
public static void Main( string [] args)
{
int A = 1, B = 3, C = 2, N = 4;
Console.Write(find(A, B, C, N));
}
}
|
Javascript
<script>
function find(A, B, C, N)
{
let arr = new Array(N).fill(0);
arr[0] = A;
arr[1] = B;
arr[2] = C;
for (let i = 3; i < N; i++) {
arr[i] = arr[i - 1]
+ arr[i - 2]
+ arr[i - 3];
}
return arr[N - 1];
}
let A = 1, B = 3, C = 2, N = 4;
document.write(find(A, B, C, N));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Efficient approach : O(1) space complexity approach
Use variable instead of array to store previous computations because the current value if depend upon the previous 3 computations , So we just need 3 variable to optimize the space complexity.
Implementations Steps :
- Initialize the last three terms in series prev1 , prev2 , prev3.
- Use a loop to calculate the N-th term of the series (starting from 4).
- For each iteration, calculate the current term as the sum of the previous 3 terms.
- Update the previous 3 terms for the next iteration.
- Return the N-th term of the series.
Implementation :
C++
#include <bits/stdc++.h>
using namespace std;
int find( int A, int B, int C, int N)
{
int prev1 = A, prev2 = B, prev3 = C;
int curr;
for ( int i = 4; i <= N; i++) {
curr = prev1 + prev2 + prev3;
prev1 = prev2;
prev2 = prev3;
prev3 = curr;
}
return curr;
}
int main()
{
int A = 1, B = 3, C = 2, N = 4;
cout << find(A, B, C, N);
return 0;
}
|
Java
import java.util.*;
public class Main
{
public static int find( int A, int B, int C, int N)
{
int prev1 = A, prev2 = B, prev3 = C;
int curr = 0 ;
for ( int i = 4 ; i <= N; i++)
{
curr = prev1 + prev2 + prev3;
prev1 = prev2;
prev2 = prev3;
prev3 = curr;
}
return curr;
}
public static void main(String[] args) {
int A = 1 , B = 3 , C = 2 , N = 4 ;
System.out.println(find(A, B, C, N));
}
}
|
Python3
def find(A, B, C, N):
prev1, prev2, prev3 = A, B, C
for i in range ( 4 , N + 1 ):
curr = prev1 + prev2 + prev3
prev1, prev2, prev3 = prev2, prev3, curr
return curr
if __name__ = = '__main__' :
A, B, C, N = 1 , 3 , 2 , 4
print (find(A, B, C, N))
|
C#
using System;
class Program {
static int Find( int A, int B, int C, int N)
{
int prev1 = A, prev2 = B, prev3 = C;
int curr = 0;
for ( int i = 4; i <= N; i++) {
curr = prev1 + prev2 + prev3;
prev1 = prev2;
prev2 = prev3;
prev3 = curr;
}
return curr;
}
static void Main( string [] args)
{
int A = 1, B = 3, C = 2, N = 4;
Console.WriteLine(Find(A, B, C, N));
}
}
|
Javascript
function find(A, B, C, N)
{
let prev1 = A, prev2 = B, prev3 = C;
let curr = 0;
for (let i = 4; i <= N; i++)
{
curr = prev1 + prev2 + prev3;
prev1 = prev2;
prev2 = prev3;
prev3 = curr;
}
return curr;
}
const A = 1, B = 3, C = 2, N = 4;
console.log(find(A, B, C, N));
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...