N-bonacci Numbers

You are given two Integers N and M, and print all the terms of the series upto 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 = 10
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 7
0 0 0 1 1 2 4 7 13

C++

// CPP program print first M terms of
// N-bonacci series.
#include <bits/stdc++.h>
using namespace std;
  
// Function to print bonacci series
void 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 Code
int main()
{
    int N = 5, M = 15;
    bonacciseries(N, M);
    return 0;
}

Java

// 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)

Python3

# Python program prfirst M 
# terms of N-bonacci series.
  
# Function to prbonacci series
def 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 Code
N = 5
M = 15
bonacciseries(N, M)
  
# This code is contributed 
# by Manish Shaw(manishshaw1)

C#

// 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
// PHP program pr$first M 
// terms of N-bonacci series.
  
// Function to pr$bonacci series
function 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)
?>

Output :

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++

// CPP program print first M terms of
// N-bonacci series.
#include <bits/stdc++.h>
using namespace std;
  
// Function to print bonacci series
void 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 Code
int main()
{
    int N = 5, M = 15;
    bonacciseries(N, M);
    return 0;
}

Java

// 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

# Python3 program print first M terms of
# N-bonacci series.
  
# Function to print bonacci series
def 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 Code
if __name__=='__main__':
    N, M = 5, 15
    bonacciseries(N, M)
  
# This code is contributed by
# Sanjit_Prasad

C#

// 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
// PHP program print 
// first M terms of
// N-bonacci series.
  
// Function to print 
// N-bonacci series
function 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)
?>

Output:

0 0 0 0 1 1 2 4 8 16 31 61 120 236 464

Time Complexity: O(M)
Auxiliary Space: O(M)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.