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,在 Newman-Conway 数列中打印第 n 个数字。
例子 :
Input : n = 2
Output : 1
Input : n = 10
Output : 6
方法一(使用递归):
一个简单的方法是直接递归实现上述递归关系。
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
方法二(使用动态规划):
通过将序列中的值存储在数组中,我们可以避免在方法 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
Javascript
输出 :
6
时间复杂度:O(n)
参考资料: https : //archive.lib.msu.edu/crcmath/math/math/n/n078.htm