Newman-Conway Sequence is the one that generates the following integer sequence.
1 1 2 2 3 4 4 4 5 6 7 7…
In mathematical terms, the sequence P(n) of Newman-Conway numbers is defined by the recurrence relation
P(n) = P(P(n - 1)) + P(n - P(n - 1))
with seed values P(1) = 1 and P(2) = 1
Given a number n, print n-th number in Newman-Conway Sequence.
Examples:
Input : n = 2 Output : 1 Input : n = 10 Output : 6
Method 1 (Use Recursion) :
A simple approach is direct recursive implementation of above recurrence relation.
C++
// C++ program for n-th // element of Newman-Conway Sequence #include <bits/stdc++.h> 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
<?php // PHP program for n-th element // of Newman-Conway Sequence // Recursive Function to // find the n-th element function sequence( $n ) { if ( $n == 1 || $n == 2) return 1; else return sequence(sequence( $n - 1))+ sequence( $n - sequence( $n - 1)); } // Driver Code $n = 10; echo (sequence( $n )); // This code is contributed by Ajit. ?> |
Javascript
<script> // JavaScript program to find nth // element of Newman-Conway Sequence // Recursion to find // n-th element function sequence(n) { if (n == 1 || n == 2) return 1; else return sequence(sequence(n - 1)) + sequence(n - sequence(n - 1)); } // Driver code let n = 10; document.write(sequence(n)); // This code is contributed by souravghosh0416 </script> |
Output :
6
Time complexity: O(n)
Auxiliary Space: O(n)
Method 2 (Use Dynamic Programming):
We can avoid repeated work done in method 1 by storing the values in the sequence in an array.
C++
// C++ program to find the n-th element of // Newman-Conway Sequence #include <bits/stdc++.h> 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
<?php // PHP program to find the n-th element // of Newman-Conway Sequence // Function to find // the n-th element function sequence( $n ) { // Declare array to // store sequence $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 Code $n = 10; echo (sequence( $n )); // This code is contributed by Ajit. ?> |
Javascript
<script> // Javascript program to find the n-th element // of Newman-Conway Sequence // Function to find // the n-th element function sequence(n) { // Declare array to // store sequence let i; let f = []; f[0] = 0; f[1] = 1; f[2] = 1; for (let i = 3; i <= n; i++) f[i] = f[f[i - 1]] + f[i - f[i - 1]]; return f[n]; } // Driver Code let n = 10; document.write(sequence(n)); // This code is contributed by gfgking. </script> |
Output :
6
Time complexity: O(n)
Auxiliary Space: O(n)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!