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.

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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.





Recommended Posts:



2.3 Average Difficulty : 2.3/5.0
Based on 14 vote(s)






User Actions