Jacobsthal and Jacobsthal-Lucas numbers - GeeksforGeeks

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: 
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++
Java
Python3
C#
PHP
Javascript
// A simple C++ recursive solution to find// Jacobsthal and Jacobsthal-Lucas numbers#include <bits/stdc++.h>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;}
// 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 */
# 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
// 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// A simple PHP recursive solution// to find Jacobsthal and// Jacobsthal-Lucas numbers // Return nth Jacobsthal number.function 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.function 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 Code$n = 5;echo "Jacobsthal number: " ,      Jacobsthal($n) , "\n";echo "Jacobsthal-Lucas number: ",      Jacobsthal_Lucas($n), "\n"; // This code is contributed by aj_36?>
<script> // JavaScript program to find max xor sum// of 1 to n using atmost k numbers     // Return nth Jacobsthal number.    function Jacobsthal(n)    {        let dp = [];           // base case        dp[0] = 0;        dp[1] = 1;           for (let i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];           return dp[n];    }       // Return nth Jacobsthal-Lucas number.    function Jacobsthal_Lucas(n)    {        let dp = [];           // base case        dp[0] = 2;        dp[1] = 1;           for (let i = 2; i <= n; i++)            dp[i] = dp[i - 1] + 2 * dp[i - 2];           return dp[n];    }        // Driver code                 let n = 5;        document.write("Jacobsthal number: "                            + Jacobsthal(n) + "<br/>");        document.write("Jacobsthal-Lucas number: "                            + Jacobsthal_Lucas(n)); </script>
Output : 
Jacobsthal number: 11
Jacobsthal-Lucas number: 31
Below is the implementation of finding nth Jacobsthal and Jacobsthal-Lucas numbers using Dynamic Programming.
C++
Java
Python3
C#
PHP
Javascript
// A DP based solution to find Jacobsthal// and Jacobsthal-Lucas numbers#include <bits/stdc++.h>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;}
// 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 */
# 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
// 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// A DP based solution to// find Jacobsthal and// Jacobsthal-Lucas numbers // Return nth Jacobsthal number.function Jacobsthal($n){    //$dp[$n + 1];     // base case    $dp[0] = 0;    $dp[1] = 1;     for ($i = 2; $i <= $n; $i++)        $dp[$i] = $dp[$i - 1] + 2 *                  $dp[$i - 2];     return $dp[$n];} // Return nth Jacobsthal-// Lucas number.function Jacobsthal_Lucas($n){    // $dp[$n + 1];     // base case    $dp[0] = 2;    $dp[1] = 1;     for ($i = 2; $i <= $n; $i++)        $dp[$i] = $dp[$i - 1] + 2 *                  $dp[$i - 2];     return $dp[$n];} // Driver Code$n = 5;echo "Jacobsthal number: " ,       Jacobsthal($n), "\n";echo "Jacobsthal-Lucas number: " ,       Jacobsthal_Lucas($n), "\n";         // This code is contributed by ajit?>
<script> // A DP based solution// to find Jacobsthal and// Jacobsthal-Lucas numbers // Return nth Jacobsthal number.function Jacobsthal(n){    let dp = new Array(n + 1);     // Base case    dp[0] = 0;    dp[1] = 1;     for(let i = 2; i <= n; i++)        dp[i] = dp[i - 1] + 2 * dp[i - 2];     return dp[n];} // Return nth Jacobsthal-Lucas number.function Jacobsthal_Lucas(n){    let dp = new Array(n + 1);     // Base case    dp[0] = 2;    dp[1] = 1;     for(let i = 2; i <= n; i++)        dp[i] = dp[i - 1] + 2 * dp[i - 2];     return dp[n];} // Driver codelet n = 5;document.write("Jacobsthal number: " +               Jacobsthal(n) + "<br>");document.write("Jacobsthal-Lucas number: " +               Jacobsthal_Lucas(n)); // This code is contributed by rameshtravel07 </script>
Output: 
Jacobsthal number: 11
Jacobsthal-Lucas number: 31
 
jit_t
PSinha
splevel62
rameshtravel07
surinderdawra388
series
Dynamic Programming
Dynamic Programming
series
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Bellman–Ford Algorithm | DP-23
Floyd Warshall Algorithm | DP-16
Subset Sum Problem | DP-25
Matrix Chain Multiplication | DP-8
Longest Palindromic Substring | Set 1
Travelling Salesman Problem | Set 1 (Naive and Dynamic Programming)
Edit Distance | DP-5
Sieve of Eratosthenes
Overlapping Subproblems Property in Dynamic Programming | DP-1
Maximum size square sub-matrix with all 1s