# Jacobsthal and Jacobsthal-Lucas numbers

• Difficulty Level : Basic
• Last Updated : 26 May, 2021

The Jacobsthal sequence is an additive sequence similar to the Fibonacci sequence, defined by the recurrence relation Jn = Jn-1 + 2Jn-2, with initial terms J0 = 0 and J1 = 1. A number in the sequence is called a Jacobsthal number. They are a specific type of Lucas sequence Un(P, Q) for which P = 1 and Q = -2.

The first Jacobsthal numbers are:
0, 1, 1, 3, 5, 11, 21, 43, 85, 171, 341, 683, 1365, 2731, 5461, 10923, 21845, 43691, ……
Jacobsthal numbers are defined by the recurrence relation:

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Jacobsthal-Lucas numbers
Jacobsthal-Lucas numbers represent the complementary Lucas sequence Vn(1, -2). They satisfy the same recurrence relation as Jacobsthal numbers but have different initial values:
Given a positive integer n. The task is to find nth Jacobsthal and Jacobsthal-Lucas numbers.

Examples :

Input : n = 5
Output :
Jacobsthal number: 11
Jacobsthal-Lucas number: 31

Input : n = 4
Output :
Jacobsthal number: 5
Jacobsthal-Lucas number: 17

Below is the implementation of finding nth Jacobsthal and Jacobsthal-Lucas numbers using recursion.

## C++

 // A simple C++ recursive solution to find// Jacobsthal and Jacobsthal-Lucas numbers#include using namespace std; // Return nth Jacobsthal number.int Jacobsthal(int n){    // base case    if (n == 0)        return 0;     // base case    if (n == 1)        return 1;     // recursive step.    return Jacobsthal(n - 1) + 2 * Jacobsthal(n - 2);} // Return nth Jacobsthal-Lucas number.int Jacobsthal_Lucas(int n){    // base case    if (n == 0)        return 2;     // base case    if (n == 1)        return 1;     // recursive step.    return Jacobsthal_Lucas(n - 1) +           2 * Jacobsthal_Lucas(n - 2);} // Driven Programint main(){    int n = 5;    cout << "Jacobsthal number: " << Jacobsthal(n) << endl;    cout << "Jacobsthal-Lucas number: " << Jacobsthal_Lucas(n) << endl;    return 0;}

## Java

 // A simple recursive solution// to find Jacobsthal and// Jacobsthal-Lucas numbersimport java.util.*;import java.lang.*; public class GfG{     // Return nth Jacobsthal number.    public static int Jacobsthal(int n)    {        // base case        if (n == 0)            return 0;         // base case        if (n == 1)            return 1;         // recursive step.        return Jacobsthal(n - 1) + 2 * Jacobsthal(n - 2);    }     // Return nth Jacobsthal-Lucas number.    public static int Jacobsthal_Lucas(int n)    {        // base case        if (n == 0)            return 2;         // base case        if (n == 1)            return 1;         // recursive step.        return Jacobsthal_Lucas(n - 1) +               2 * Jacobsthal_Lucas(n - 2);    }     // Driver function    public static void main(String argc[]){        int n = 5;        System.out.println("Jacobsthal number: "                            + Jacobsthal(n));        System.out.println("Jacobsthal-Lucas number: "                            + Jacobsthal_Lucas(n));    }} /* This code is contributed Sagar Shukla */

## Python3

 # A simple Python3 recursive solution to # find Jacobsthal and Jacobsthal-Lucas# numbers # Return nth Jacobsthal number.def Jacobsthal(n):    # base case    if (n == 0):        return 0     # base case    if (n == 1):        return 1     # recursive step.    return Jacobsthal(n - 1) + 2 * Jacobsthal(n - 2) # Return nth Jacobsthal-Lucas number.def Jacobsthal_Lucas(n):    # base case    if (n == 0):        return 2             # base case    if (n == 1):        return 1     # recursive step.    return Jacobsthal_Lucas(n - 1) + 2 * Jacobsthal_Lucas(n - 2) # Driven Programn = 5print("Jacobsthal number:", Jacobsthal(n))print("Jacobsthal-Lucas number:", Jacobsthal_Lucas(n)) # This code is contributed by Smitha Dinesh Semwal

## C#

 // A simple recursive solution// to find Jacobsthal and// Jacobsthal-Lucas numbersusing System; public class GfG {     // Return nth Jacobsthal number.    public static int Jacobsthal(int n)    {        // base case        if (n == 0) return 0;         // base case        if (n == 1) return 1;         // recursive step.        return Jacobsthal(n - 1) +               2 * Jacobsthal(n - 2);    }     // Return nth Jacobsthal-Lucas number.    public static int Jacobsthal_Lucas(int n)    {        // base case        if (n == 0) return 2;         // base case        if (n == 1) return 1;         // recursive step        return Jacobsthal_Lucas(n - 1) +                2 * Jacobsthal_Lucas(n - 2);    }     // Driver function    public static void Main() {        int n = 5;        Console.WriteLine("Jacobsthal number: "                                + Jacobsthal(n));        Console.WriteLine("Jacobsthal-Lucas number: "                                + Jacobsthal_Lucas(n));    }} // This code is contributed vt_m

## PHP

 

## Javascript

 

Output :

Jacobsthal number: 11
Jacobsthal-Lucas number: 31

Below is the implementation of finding nth Jacobsthal and Jacobsthal-Lucas numbers using Dynamic Programming.

## C++

 // A DP based solution to find Jacobsthal// and Jacobsthal-Lucas numbers#include using namespace std; // Return nth Jacobsthal number.int Jacobsthal(int n){    int dp[n + 1];     // base case    dp[0] = 0;    dp[1] = 1;     for (int i = 2; i <= n; i++)        dp[i] = dp[i - 1] + 2 * dp[i - 2];     return dp[n];} // Return nth Jacobsthal-Lucas number.int Jacobsthal_Lucas(int n){    int dp[n + 1];     // base case    dp[0] = 2;    dp[1] = 1;     for (int i = 2; i <= n; i++)        dp[i] = dp[i - 1] + 2 * dp[i - 2];     return dp[n];}// Driven Programint main(){    int n = 5;    cout << "Jacobsthal number: " << Jacobsthal(n) << endl;    cout << "Jacobsthal-Lucas number: " << Jacobsthal_Lucas(n) << endl;    return 0;}

## Java

 // A DP based solution// to find Jacobsthal and// Jacobsthal-Lucas numbersimport java.util.*;import java.lang.*; public class GfG{     // Return nth Jacobsthal number.    public static int Jacobsthal(int n)    {        int[] dp = new int[n + 1];         // base case        dp[0] = 0;        dp[1] = 1;         for (int i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];         return dp[n];    }     // Return nth Jacobsthal-Lucas number.    public static int Jacobsthal_Lucas(int n)    {        int[] dp = new int[n + 1];         // base case        dp[0] = 2;        dp[1] = 1;         for (int i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];         return dp[n];    }     // Driver function    public static void main(String argc[]){        int n = 5;        System.out.println("Jacobsthal number: "                            + Jacobsthal(n));        System.out.println("Jacobsthal-Lucas number: "                            + Jacobsthal_Lucas(n));    }     } /* This code is contributed Sagar Shukla */

## Python3

 # A DP based solution to find# Jacobsthal and Jacobsthal-# Lucas numbers # Return nth Jacobsthal number.def Jacobsthal(n):    dp = [0] * (n + 1)     # base case    dp[0] = 0    dp[1] = 1     for i in range(2, n+1):        dp[i] = dp[i - 1] + 2 * dp[i - 2]         return dp[n]  # Return nth Jacobsthal-# Lucas number.def Jacobsthal_Lucas(n):     dp=[0] * (n + 1)         # base case    dp[0] = 2    dp[1] = 1         for i in range(2, n+1):        dp[i] = dp[i - 1] + 2 * dp[i - 2];         return dp[n] # Driven Programn = 5 print("Jacobsthal number:",Jacobsthal(n))print("Jacobsthal-Lucas number:",Jacobsthal_Lucas(n)) # This code is contributed by Smitha Dinesh Semwal

## C#

 // A DP based solution// to find Jacobsthal and// Jacobsthal-Lucas numbersusing System; public class GfG {     // Return nth Jacobsthal number.    public static int Jacobsthal(int n)    {        int[] dp = new int[n + 1];         // base case        dp[0] = 0;        dp[1] = 1;         for (int i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];         return dp[n];    }     // Return nth Jacobsthal-Lucas number.    public static int Jacobsthal_Lucas(int n)    {        int[] dp = new int[n + 1];         // base case        dp[0] = 2;        dp[1] = 1;         for (int i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];         return dp[n];    }     // Driver Code    public static void Main() {        int n = 5;        Console.WriteLine("Jacobsthal number: "                                + Jacobsthal(n));        Console.WriteLine("Jacobsthal-Lucas number: "                                + Jacobsthal_Lucas(n));    }     } // This code is contributed vt_m

## PHP

 

## Javascript

 

Output:

Jacobsthal number: 11
Jacobsthal-Lucas number: 31

My Personal Notes arrow_drop_up