K- Fibonacci series
Last Updated :
16 Nov, 2022
Given integers ‘K’ and ‘N’, the task is to find the Nth term of the K-Fibonacci series.
In K – Fibonacci series, the first ‘K’ terms will be ‘1’ and after that every ith term of the series will be the sum of previous ‘K’ elements in the same series.
Examples:
Input: N = 4, K = 2
Output: 3
The K-Fibonacci series for K=2 is 1, 1, 2, 3, ...
And, the 4th element is 3.
Input: N = 5, K = 6
Output: 1
The K-Fibonacci series for K=6 is 1, 1, 1, 1, 1, 1, 6, 11, ...
A simple approach:
- First, initialize the first ‘K’ elements to ‘1’.
- Then, calculate the sum of previous ‘K’ elements by running a loop from ‘i-k’ to ‘i-1’.
- Set the ith value to the sum.
Time Complexity: O(N*K)
An efficient approach:
- First, initialize the first ‘K’ elements to ‘1’.
- Create a variable named ‘sum’ which will be initialized with ‘K’.
- Set the value of (K+1)th element to sum.
- Set the next values as Array[i] = sum – Array[i-k-1] + Array[i-1] then update sum = Array[i].
- In the end, display the Nth term of the array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void solve( int N, int K)
{
vector< long long int > Array(N + 1, 0);
if (N <= K) {
cout << "1" << endl;
return ;
}
long long int i = 0, sum = K;
for (i = 1; i <= K; ++i) {
Array[i] = 1;
}
Array[i] = sum;
for ( int i = K + 2; i <= N; ++i) {
Array[i] = sum - Array[i - K - 1] + Array[i - 1];
sum = Array[i];
}
cout << Array[N] << endl;
}
int main()
{
long long int N = 4, K = 2;
solve(N, K);
return 0;
}
|
Java
public class GFG {
static void solve( int N, int K)
{
int Array[] = new int [N + 1 ];
if (N <= K) {
System.out.println( "1" ) ;
return ;
}
int i = 0 ;
int sum = K;
for (i = 1 ; i <= K; ++i) {
Array[i] = 1 ;
}
Array[i] = sum;
for (i = K + 2 ; i <= N; ++i) {
Array[i] = sum - Array[i - K - 1 ] + Array[i - 1 ];
sum = Array[i];
}
System.out.println(Array[N]);
}
public static void main(String args[])
{
int N = 4 , K = 2 ;
solve(N, K);
}
}
|
Python3
def solve(N, K) :
Array = [ 0 ] * (N + 1 )
if (N < = K) :
print ( "1" )
return
i = 0
sm = K
for i in range ( 1 , K + 1 ) :
Array[i] = 1
Array[i + 1 ] = sm
for i in range (K + 2 , N + 1 ) :
Array[i] = sm - Array[i - K - 1 ] + Array[i - 1 ]
sm = Array[i]
print (Array[N])
N = 4
K = 2
solve(N, K)
|
C#
using System;
class GFG {
public static void solve( int N, int K)
{
int [] Array = new int [N + 1];
if (N <= K)
{
Console.WriteLine( "1" );
return ;
}
int i = 0;
int sum = K;
for (i = 1; i <= K; ++i)
{
Array[i] = 1;
}
Array[i] = sum;
for (i = K + 2; i <= N; ++i)
{
Array[i] = sum - Array[i - K - 1] +
Array[i - 1];
sum = Array[i];
}
Console.WriteLine(Array[N]);
}
public static void Main( string [] args)
{
int N = 4, K = 2;
solve(N, K);
}
}
|
PHP
<?php
function solve( $N , $K )
{
$Array = array_fill (0, $N + 1, NULL);
if ( $N <= $K )
{
echo "1" . "\n" ;
return ;
}
$i = 0;
$sum = $K ;
for ( $i = 1; $i <= $K ; ++ $i )
{
$Array [ $i ] = 1;
}
$Array [ $i ] = $sum ;
for ( $i = $K + 2; $i <= $N ; ++ $i )
{
$Array [ $i ] = $sum - $Array [ $i - $K - 1] +
$Array [ $i - 1];
$sum = $Array [ $i ];
}
echo $Array [ $N ] . "\n" ;
}
$N = 4;
$K = 2;
solve( $N , $K );
?>
|
Javascript
<script>
function solve(N, K)
{
var Arr = new Array(N + 1);
if (N <= K) {
document.write( "1" + "<br>" );
return ;
}
var i = 0, sum = K;
for (i = 1; i <= K; ++i) {
Arr[i] = 1;
}
Arr[i] = sum;
for ( var i = K + 2; i <= N; ++i) {
Arr[i] = sum - Arr[i - K - 1] + Arr[i - 1];
sum = Arr[i];
}
document.write( Arr[N] + "<br>" );
}
var N = 4, K = 2;
solve(N, K);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Share your thoughts in the comments
Please Login to comment...