N-bonacci Numbers

Difficulty Level :
Easy
You are given two integers N and M, and print all the terms of the series up to M-terms of the N-bonacci Numbers. For example, when N = 2, the sequence becomes Fibonacci, when n = 3, sequence becomes Tribonacci.
In general, in N-bonacci sequence, we use sum of preceding N numbers from the next term. For example, a 3-bonacci sequence is the following: 0, 0, 1, 1, 2, 4, 7, 13, 24, 44, 81
The Fibonacci sequence is a set of numbers that starts with one or zero, followed by a one, and proceeds based on the rule that each number is equal to the sum of preceding two numbers 0, 1, 1, 2, 3, 5, 8.....
Examples :  
Input : N = 3, M = 8
Output : 0, 0, 1, 1, 2, 4, 7, 13
We need to print first M terms.
First three terms are 0, 0 and 1.
Fourth term is 0 + 0 + 1 = 1
Fifth term is 0 + 1 + 1 = 2
Sixth terms is 1 + 1 + 2 = 4
Seventh term is 7 (1 + 2 + 4) and eighth
term is 13 (7 + 4 + 2).

Input : N = 4, M = 10
Output : 0 0 0 1 1 2 4 8 15 29 
Method 1 (Simple) 
Initialize first N-1 terms as 0 and N-th term as 1. Now to find terms from (N+1)-th to M-th, we simply compute sum of previous N terms. 
Example : N = 4, M = 9
First three terms are 0, 0, 0 
Fourth term is 1. 
Remaining terms are computed by adding 
previous 4 terms. 0 0 0 1 0 0 0 1 1 0 0 0 1 1 2 0 0 0 1 1 2 4 0 0 0 1 1 2 4 80 0 0 1 1 2 4 8 150 0 0 1 1 2 4 8 15 29
C++
Java
Python3
C#
PHP
Javascript
// CPP program print first M terms of// N-bonacci series.#include <bits/stdc++.h>using namespace std;  // Function to print bonacci seriesvoid bonacciseries(long n, int m){    // Assuming m >= n.    int a[m] = { 0 };    a[n - 1] = 1;      // Computing every term as sum of previous    // n terms.    for (int i = n; i < m; i++)        for (int j = i - n; j < i; j++)            a[i] += a[j];      for (int i = 0; i < m; i++)        cout << a[i] << "  ";}  // Driver's Codeint main(){    int N = 5, M = 15;    bonacciseries(N, M);    return 0;}
// Java program print first M // terms of N-bonacci series.import java.io.*;  class GFG{    // Function to print    // bonacci series    static void bonacciseries(int n,                               int m)    {        // Assuming m >= n.        int []a = new int[m];        a[n - 1] = 1;               // Computing every term as         // sum of previous n terms.        for (int i = n; i < m; i++)            for (int j = i - n; j < i; j++)                a[i] += a[j];               for (int i = 0; i < m; i++)            System.out.print(a[i] + " ");    }           // Driver Code    public static void main(String args[])    {        int N = 5, M = 15;        bonacciseries(N, M);    }}   // This code is contributed by // Manish Shaw(manishshaw1)
# Python program print first M # terms of N-bonacci series.  # Function to print bonacci seriesdef bonacciseries(n, m) :      # Assuming m >= n.    a = [0] * m    a[n - 1] = 1      # Computing every term as     # sum of previous n terms.    for i in range(n, m) :        for j in range(i - n, i) :            a[i] = a[i] + a[j]      for i in range(0, m) :        print (a[i], end = " ")  # Driver CodeN = 5M = 15bonacciseries(N, M)  # This code is contributed # by Manish Shaw(manishshaw1)
// C# program print first M // terms of N-bonacci series.using System;  class GFG{    // Function to print    // bonacci series    static void bonacciseries(int n,                               int m)    {        // Assuming m >= n.        int []a = new int[m];        Array.Clear(a, 0, a.Length);        a[n - 1] = 1;              // Computing every term as         // sum of previous n terms.        for (int i = n; i < m; i++)            for (int j = i - n; j < i; j++)                a[i] += a[j];              for (int i = 0; i < m; i++)            Console.Write(a[i] + " ");    }          // Driver Code    static void Main()    {        int N = 5, M = 15;        bonacciseries(N, M);    }}  // This code is contributed by // Manish Shaw(manishshaw1)
<?php// PHP program print first M // terms of N-bonacci series.  // Function to print bonacci seriesfunction bonacciseries($n, $m){    // Assuming m >= n.    $a = array_fill(0, $m, 0);    $a[$n - 1] = 1;      // Computing every term as     // sum of previous n terms.    for ($i = $n; $i < $m; $i++)        for ($j = $i - $n;              $j < $i; $j++)            $a[$i] += $a[$j];      for ($i = 0; $i < $m; $i++)        echo ($a[$i]." ");}  // Driver Code$N = 5; $M = 15;bonacciseries($N, $M);  // This code is contributed // by Manish Shaw(manishshaw1)?>
<script>  // Javascript program print first M // terms of N-bonacci series.      // Function to print    // bonacci series    function bonacciseries(n , m)     {        // Assuming m >= n.        var a = Array(m).fill(0);        a[n - 1] = 1;          // Computing every term as        // sum of previous n terms.        for (i = n; i < m; i++)            for (j = i - n; j < i; j++)                a[i] += a[j];          for (i = 0; i < m; i++)            document.write(a[i] + " ");    }      // Driver Code              var N = 5, M = 15;        bonacciseries(N, M);  // This code contributed by Rajput-Ji   </script>
0  0  0  0  1  1  2  4  8  16  31  61  120  236  464
Time Complexity : O(M * N) 
Auxiliary Space : O(M)
Method 2 (Optimized) 
We can optimize for large values of N. The idea is based on sliding window. The current term a[i] can be computed as a[i-1] + a[i-1] – a[i-n-1] 
C++
Java
Python3
C#
PHP
Javascript
// CPP program print first M terms of// N-bonacci series.#include <bits/stdc++.h>using namespace std;  // Function to print bonacci seriesvoid bonacciseries(long n, int m){      // Assuming m > n.    int a[m] = { 0 };    a[n - 1] = 1;    a[n] = 1;      // Uses sliding window    for (int i = n + 1; i < m; i++)        a[i] = 2 * a[i - 1] - a[i - n - 1];      // Printing result    for (int i = 0; i < m; i++)        cout << a[i] << " ";}  // Driver's Codeint main(){    int N = 5, M = 15;    bonacciseries(N, M);    return 0;}
// Java program print first M terms of// N-bonacci series.class GFG {          // Function to print bonacci series    static void bonacciseries(int n, int m)    {              // Assuming m > n.        int a[] = new int[m];        for(int i = 0; i < m; i++)            a[i] = 0;                      a[n - 1] = 1;        a[n] = 1;              // Uses sliding window        for (int i = n + 1; i < m; i++)            a[i] = 2 * a[i - 1] - a[i - n - 1];              // Printing result        for (int i = 0; i < m; i++)            System.out.print(a[i] + " ");    }          // Driver's Code    public static void main(String args[])    {        int N = 5, M = 15;        bonacciseries(N, M);    }}  // This code is contributed by JaideepPyne.
# Python3 program print first M terms of# N-bonacci series.  # Function to print bonacci seriesdef bonacciseries(n, m):      # Assuming m > n.    a = [0 for i in range(m)]    a[n - 1] = 1    a[n] = 1      # Uses sliding window    for i in range(n + 1, m):        a[i] = 2 * a[i - 1] - a[i - n - 1]      # Printing result    for i in range(0, m):        print(a[i], end=" ")    # Driver's Codeif __name__=='__main__':    N, M = 5, 15    bonacciseries(N, M)  # This code is contributed by# Sanjit_Prasad
// Java program print // first M terms of// N-bonacci series.using System;  class GFG {          // Function to print    // bonacci series    static void bonacciseries(int n,                               int m)    {              // Assuming m > n.        int []a = new int[m];        for(int i = 0; i < m; i++)            a[i] = 0;                      a[n - 1] = 1;        a[n] = 1;              // Uses sliding window        for (int i = n + 1; i < m; i++)            a[i] = 2 * a[i - 1] -                        a[i - n - 1];              // Printing result        for (int i = 0; i < m; i++)            Console.Write(a[i] + " ");    }          // Driver Code    static void Main()    {        int N = 5, M = 15;        bonacciseries(N, M);    }}  // This code is contributed by// Manish Shaw(manishshaw1)
<?php// PHP program print // first M terms of// N-bonacci series.  // Function to print // N-bonacci seriesfunction bonacciseries($n, $m){     // Assuming m > n.    $a = array();    for ($i = 0; $i < $m; $i++)        $a[$i] = 0;    $a[$n - 1] = 1;    $a[$n] = 1;      // Uses sliding window    for ($i = $n + 1; $i < $m; $i++)        $a[$i] = 2 * $a[$i - 1] -                      $a[$i - $n - 1];      // Printing result    for ($i = 0; $i < $m; $i++)        echo ($a[$i] . " ");}  // Driver Code$N = 5; $M = 15;bonacciseries($N, $M);  // This code is contributed by // Manish Shaw(manishshaw1)?>
<script>  // Javascript program print first M terms of// N-bonacci series.  // Function to print bonacci series    function bonacciseries(n , m)     {          // Assuming m > n.        var a = Array(m).fill(0);        for (i = 0; i < m; i++)            a[i] = 0;          a[n - 1] = 1;        a[n] = 1;          // Uses sliding window        for (i = n + 1; i < m; i++)            a[i] = 2 * a[i - 1] - a[i - n - 1];          // Printing result        for (i = 0; i < m; i++)            document.write(a[i] + " ");    }      // Driver's Code              var N = 5, M = 15;        bonacciseries(N, M);  // This code contributed by Rajput-Ji   </script>
0 0 0 0 1 1 2 4 8 16 31 61 120 236 464
Time Complexity: O(M) 
Auxiliary Space: O(M) 
jaideeppyne1997
manishshaw1
Sanjit_Prasad
Akanksha_Rai
Rajput-Ji
kingrishabdugar
simranarora5sos
Fibonacci
series
sliding-window
Mathematical
sliding-window
Mathematical
series
Fibonacci
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Fibonacci numbers
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
C++ Data Types
Merge two sorted arrays
Coin Change | DP-7
Operators in C / C++
Prime Numbers
Program to find GCD or HCF of two numbers
Minimum number of jumps to reach end