📜  K-斐波那契系列

📅  最后修改于: 2021-05-06 19:01:25             🧑  作者: Mango

给定整数“ K”和“ N”,任务是找到K-斐波那契数列的第N个项。

例子:

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, ...

一种简单的方法:

  • 首先,将第一个“ K”元素初始化为“ 1”。
  • 然后,通过运行从“ ik ”到“ i-1 ”的循环来计算先前的“ K”个元素的总和。
  • 将第i个值设置为总和。

时间复杂度: O(N * K)

一种有效的方法:

  • 首先,将第一个“ K”元素初始化为“ 1”。
  • 创建一个名为“ sum”的变量,该变量将以“ K”初始化。
  • 将第(K+1)th元素的值设置为sum。
  • 将下一个值设置为Array[i] = sum - Array[ik-1] + Array[i-1]然后更新sum = Array[i]
  • 最后,显示数组的第N个项。

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
  
// Function that finds the Nth
// element of K-Fibonacci series
void solve(int N, int K)
{
    vector Array(N + 1, 0);
  
    // If N is less than K
    // then the element is '1'
    if (N <= K) {
        cout << "1" << endl;
        return;
    }
  
    long long int i = 0, sum = K;
  
    // first k elements are 1
    for (i = 1; i <= K; ++i) {
        Array[i] = 1;
    }
  
    // (K+1)th element is K
    Array[i] = sum;
  
    // find the elements of the
    // K-Fibonacci series
    for (int i = K + 2; i <= N; ++i) {
  
        // subtract the element at index i-k-1
        // and add the element at index i-i
        // from the sum (sum contains the sum
        // of previous 'K' elements )
        Array[i] = sum - Array[i - K - 1] + Array[i - 1];
  
        // set the new sum
        sum = Array[i];
    }
    cout << Array[N] << endl;
}
  
// Driver code
int main()
{
    long long int N = 4, K = 2;
  
    // get the Nth value
    // of K-Fibonacci series
    solve(N, K);
  
    return 0;
}


Java
// Java implementation of above approach
  
public class GFG {
  
    // Function that finds the Nth
    // element of K-Fibonacci series
    static void solve(int N, int K)
    {
        int Array[] = new int[N + 1];
          
  
        // If N is less than K
        // then the element is '1'
        if (N <= K) {
            System.out.println("1") ;
            return;
        }
  
        int i = 0 ; 
        int sum = K;
  
        // first k elements are 1
        for (i = 1; i <= K; ++i) {
            Array[i] = 1;
        }
  
        // (K+1)th element is K
        Array[i] = sum;
  
        // find the elements of the
        // K-Fibonacci series
        for (i = K + 2; i <= N; ++i) {
  
            // subtract the element at index i-k-1
            // and add the element at index i-i
            // from the sum (sum contains the sum
            // of previous 'K' elements )
            Array[i] = sum - Array[i - K - 1] + Array[i - 1];
  
            // set the new sum
            sum = Array[i];
        }
        System.out.println(Array[N]);
    }
  
    public static void main(String args[])
    {
          int N = 4, K = 2;
  
            // get the Nth value
            // of K-Fibonacci series
            solve(N, K);
  
    }
    // This code is contributed by ANKITRAI1
}


Python3
# Python3 implementation of above approach
  
# Function that finds the Nth
# element of K-Fibonacci series
def solve(N, K) :
    Array = [0] * (N + 1)
      
    # If N is less than K
    # then the element is '1'
    if (N <= K) :
        print("1")
        return
      
    i = 0
    sm = K
      
    # first k elements are 1
    for i in range(1, K + 1) :
        Array[i] = 1
          
    # (K+1)th element is K
    Array[i + 1] = sm
      
    # find the elements of the
    # K-Fibonacci series
    for i in range(K + 2, N + 1) :
          
        # subtract the element at index i-k-1
        # and add the element at index i-i
        # from the sum (sum contains the sum
        # of previous 'K' elements )
        Array[i] = sm - Array[i - K - 1] + Array[i - 1]
  
        # set the new sum
        sm = Array[i]
  
    print(Array[N])
      
      
# Driver code
N = 4
K = 2
  
# get the Nth value
# of K-Fibonacci series
solve(N, K)
  
# This code is contributed by Nikita Tiwari.


C#
// C# implementation of above approach 
using System;
  
class GFG {
  
    // Function that finds the Nth 
    // element of K-Fibonacci series 
    public static void solve(int N, int K)
    {
        int[] Array = new int[N + 1];
  
  
        // If N is less than K 
        // then the element is '1' 
        if (N <= K)
        {
            Console.WriteLine("1");
            return;
        }
  
        int i = 0;
        int sum = K;
  
        // first k elements are 1 
        for (i = 1; i <= K; ++i)
        {
            Array[i] = 1;
        }
  
        // (K+1)th element is K 
        Array[i] = sum;
  
        // find the elements of the 
        // K-Fibonacci series 
        for (i = K + 2; i <= N; ++i)
        {
  
            // subtract the element at index i-k-1 
            // and add the element at index i-i 
            // from the sum (sum contains the sum 
            // of previous 'K' elements ) 
            Array[i] = sum - Array[i - K - 1] +
                                 Array[i - 1];
  
            // set the new sum 
            sum = Array[i];
        }
        Console.WriteLine(Array[N]);
    }
  
    // Main Method
    public static void Main(string[] args)
    {
        int N = 4, K = 2;
  
            // get the Nth value 
            // of K-Fibonacci series 
            solve(N, K);
  
    }
      
}
  
// This code is contributed
// by Shrikant13


PHP


输出:
3

时间复杂度: O(N)