📜  纽曼康威序列

📅  最后修改于: 2021-05-04 21:30:28             🧑  作者: Mango

Newman-Conway序列是生成以下整数序列的序列。
1 1 2 2 3 4 4 4 5 6 7 7…
在数学上,纽曼-康威数的序列P(n)由递归关系定义

P(n) = P(P(n - 1)) + P(n - P(n - 1)) 

种子值P(1)= 1和P(2)= 1
给定数字n,则按纽曼康威序列打印第n个数字。

例子 :

Input : n = 2
Output : 1

Input : n = 10
Output : 6

方法1(使用递归):

一种简单的方法是上述递归关系的直接递归实现。

C++
// C++ program for n-th
// element of Newman-Conway Sequence
#include 
using namespace std;
 
// Recursive Function to find the n-th element
int sequence(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return sequence(sequence(n - 1))
                + sequence(n - sequence(n - 1));
}
 
// Driver Program
int main()
{
    int n = 10;
    cout << sequence(n);
    return 0;
}


Java
// Java program to find nth
// element of Newman-Conway Sequence
import java.io.*;
 
class GFG {
     
    // Recursion to find
    // n-th element
    static int sequence(int n)
    {
        if (n == 1 || n == 2)
            return 1;
        else
            return sequence(sequence(n - 1))
                  + sequence(n - sequence(n - 1));
    }
      
    // Driver Program
    public static void main(String args[])
    {
        int n = 10;
        System.out.println(sequence(n));
    }
}
 
/*This code is contributed by Nikita Tiwari.*/


Python
# Recursive function to find the n-th
# element of sequence
def sequence(n):
    if n == 1 or n == 2:
        return 1
    else:
        return sequence(sequence(n-1)) + sequence(n-sequence(n-1));
         
# Driver code
def main():
    n = 10
    print sequence(n)
     
if __name__ == '__main__':
    main()


C#
// C# program to find nth element
// of Newman-Conway Sequence
using System;
 
class GFG {
     
    // Recursion to find
    // n-th element
    static int sequence(int n)
    {
        if (n == 1 || n == 2)
            return 1;
        else
            return sequence(sequence(n - 1)) + sequence
                           (n - sequence(n - 1));
    }
     
    // Driver code
    public static void Main()
    {
        int n = 10;
        Console.Write(sequence(n));
    }
}
 
// This code is contributed by Nitin Mittal.


PHP


Javascript


C++
// C++ program to find the n-th element of
// Newman-Conway Sequence
#include 
using namespace std;
 
// Function to find the n-th element
int sequence(int n)
{
    // Declare array to store sequence
    int f[n + 1];
    int i;
    f[0] = 0;
    f[1] = 1;
    f[2] = 1;
 
    for (i = 3; i <= n; i++)
        f[i] = f[f[i - 1]] + f[i - f[i - 1]];   
 
    return f[n];
}
 
// Driver Program
int main()
{
    int n = 10;
    cout << sequence(n);
    return 0;
}


Java
// JAVA Code for Newman-Conway Sequence
import java.util.*;
 
class GFG {
     
    // Function to find the n-th element
    static int sequence(int n)
    {
        // Declare array to store sequence
        int f[] = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        f[2] = 1;
 
        int i;
      
        for (i = 3; i <= n; i++)
            f[i] = f[f[i - 1]] +
                        f[i - f[i - 1]];   
      
        return f[n];
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
         int n = 10;
         System.out.println(sequence(n));
 
    }
}
 
// This code is contributed by Arnav Kr. Mandal.


Python
''' Python program to find the n-th element of
    Newman-Conway Sequence'''
 
# To declare array import module array
import array
def sequence(n):
    f = array.array('i', [0, 1, 1])
 
    # To store values of sequence in array
    for i in range(3, n + 1):
        r = f[f[i-1]]+f[i-f[i-1]]
        f.append(r);
 
    return r
 
# Driver code
def main():
    n = 10
    print sequence(n)
     
if __name__ == '__main__':
    main()


C#
// C# Code for Newman-Conway Sequence
using System;
 
class GFG {
     
    // Function to find the n-th element
    static int sequence(int n)
    {
        // Declare array to store sequence
        int []f = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        f[2] = 1;
 
        int i;
     
        for (i = 3; i <= n; i++)
            f[i] = f[f[i - 1]] +
                   f[i - f[i - 1]];
     
        return f[n];
    }
     
    // Driver Code
    public static void Main()
    {
        int n = 10;
        Console.Write(sequence(n));
 
    }
}
 
// This code is contributed by Nitin Mittal.


PHP


Javascript


输出 :

6

方法2(使用动态编程):
通过将序列中的值存储在数组中,我们可以避免方法1中的重复工作。

C++

// C++ program to find the n-th element of
// Newman-Conway Sequence
#include 
using namespace std;
 
// Function to find the n-th element
int sequence(int n)
{
    // Declare array to store sequence
    int f[n + 1];
    int i;
    f[0] = 0;
    f[1] = 1;
    f[2] = 1;
 
    for (i = 3; i <= n; i++)
        f[i] = f[f[i - 1]] + f[i - f[i - 1]];   
 
    return f[n];
}
 
// Driver Program
int main()
{
    int n = 10;
    cout << sequence(n);
    return 0;
}

Java

// JAVA Code for Newman-Conway Sequence
import java.util.*;
 
class GFG {
     
    // Function to find the n-th element
    static int sequence(int n)
    {
        // Declare array to store sequence
        int f[] = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        f[2] = 1;
 
        int i;
      
        for (i = 3; i <= n; i++)
            f[i] = f[f[i - 1]] +
                        f[i - f[i - 1]];   
      
        return f[n];
    }
     
    /* Driver program to test above function */
    public static void main(String[] args)
    {
         int n = 10;
         System.out.println(sequence(n));
 
    }
}
 
// This code is contributed by Arnav Kr. Mandal.

Python

''' Python program to find the n-th element of
    Newman-Conway Sequence'''
 
# To declare array import module array
import array
def sequence(n):
    f = array.array('i', [0, 1, 1])
 
    # To store values of sequence in array
    for i in range(3, n + 1):
        r = f[f[i-1]]+f[i-f[i-1]]
        f.append(r);
 
    return r
 
# Driver code
def main():
    n = 10
    print sequence(n)
     
if __name__ == '__main__':
    main()

C#

// C# Code for Newman-Conway Sequence
using System;
 
class GFG {
     
    // Function to find the n-th element
    static int sequence(int n)
    {
        // Declare array to store sequence
        int []f = new int[n + 1];
        f[0] = 0;
        f[1] = 1;
        f[2] = 1;
 
        int i;
     
        for (i = 3; i <= n; i++)
            f[i] = f[f[i - 1]] +
                   f[i - f[i - 1]];
     
        return f[n];
    }
     
    // Driver Code
    public static void Main()
    {
        int n = 10;
        Console.Write(sequence(n));
 
    }
}
 
// This code is contributed by Nitin Mittal.

的PHP


Java脚本


输出 :

6

时间复杂度:O(n)
参考: https : //archive.lib.msu.edu/crcmath/math/math/n/n078.htm