📜  Jacobsthal和Jacobsthal-Lucas数

📅  最后修改于: 2021-05-06 08:07:15             🧑  作者: Mango

Jacobsthal序列是类似于Fibonacci序列的加法序列,由递归关系J n = J n-1 + 2J n-2定义,初始项J 0 = 0和J 1 = 1。称为雅各布斯泰尔数。它们是卢卡斯序列U n (P,Q)的特定类型,其P = 1和Q = -2。
第一个Jacobsthal数是:
0,1,1,3,5,11,21,43,85,171,341,683,1365,2731,5461,10923,21845,43691,……
Jacobsthal数由递归关系定义:
{\displaystyle J_{n}=\left\{\begin{matrix} 0 & & if n=0\\1&&ifn=1 \\ J_{n-1} + 2J_{n-2}&&ifn>1 \end{matrix}\right.}
Jacobsthal-Lucas数
Jacobsthal-Lucas数字代表互补的Lucas序列V n (1,-2)。它们满足与Jacobsthal数相同的递归关系,但具有不同的初始值: {\displaystyle L_{n}=\left\{\begin{matrix} 2 & & if n=0\\1&&ifn=1 \\ L_{n-1} + 2L_{n-2}&&ifn>1 \end{matrix}\right.}
给定正整数n 。任务是找到第n个Jacobsthal和Jacobsthal-Lucas数。
例子 :

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

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

下面是使用递归找到第n个Jacobsthal和Jacobsthal-Lucas数的实现。

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 Program
int 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 numbers
import 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 cotributed 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 Program
n = 5
print("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 numbers
using 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 cotributed vt_m


PHP


Javascript


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 Program
int 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 numbers
import 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 cotributed 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 Program
n = 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 numbers
using 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 cotributed vt_m


PHP


输出 :

Jacobsthal number: 11
Jacobsthal-Lucas number: 31

下面是使用动态编程查找第n个Jacobsthal和Jacobsthal-Lucas数的实现。

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 Program
int 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 numbers
import 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 cotributed 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 Program
n = 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 numbers
using 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 cotributed vt_m

的PHP


输出:

Jacobsthal number: 11
Jacobsthal-Lucas number: 31