Newman-Conway Sequence
Last Updated :
14 Feb, 2023
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++
#include <bits/stdc++.h>
using namespace std;
int sequence( int n)
{
if (n == 1 || n == 2)
return 1;
else
return sequence(sequence(n - 1))
+ sequence(n - sequence(n - 1));
}
int main()
{
int n = 10;
cout << sequence(n);
return 0;
}
|
Java
import java.io.*;
class GFG {
static int sequence( int n)
{
if (n == 1 || n == 2 )
return 1 ;
else
return sequence(sequence(n - 1 ))
+ sequence(n - sequence(n - 1 ));
}
public static void main(String args[])
{
int n = 10 ;
System.out.println(sequence(n));
}
}
|
Python
def sequence(n):
if n = = 1 or n = = 2 :
return 1
else :
return sequence(sequence(n - 1 )) + sequence(n - sequence(n - 1 ));
def main():
n = 10
print sequence(n)
if __name__ = = '__main__' :
main()
|
C#
using System;
class GFG {
static int sequence( int n)
{
if (n == 1 || n == 2)
return 1;
else
return sequence(sequence(n - 1)) + sequence
(n - sequence(n - 1));
}
public static void Main()
{
int n = 10;
Console.Write(sequence(n));
}
}
|
PHP
<?php
function sequence( $n )
{
if ( $n == 1 || $n == 2)
return 1;
else
return sequence(sequence( $n - 1))+
sequence( $n - sequence( $n - 1));
}
$n = 10;
echo (sequence( $n ));
?>
|
Javascript
<script>
function sequence(n)
{
if (n == 1 || n == 2)
return 1;
else
return sequence(sequence(n - 1)) +
sequence(n - sequence(n - 1));
}
let n = 10;
document.write(sequence(n));
</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++
#include <bits/stdc++.h>
using namespace std;
int sequence( int n)
{
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];
}
int main()
{
int n = 10;
cout << sequence(n);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int sequence( int n)
{
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];
}
public static void main(String[] args)
{
int n = 10 ;
System.out.println(sequence(n));
}
}
|
Python
import array
def sequence(n):
f = array.array( 'i' , [ 0 , 1 , 1 ])
for i in range ( 3 , n + 1 ):
r = f[f[i - 1 ]] + f[i - f[i - 1 ]]
f.append(r);
return r
def main():
n = 10
print sequence(n)
if __name__ = = '__main__' :
main()
|
C#
using System;
class GFG {
static int sequence( int n)
{
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];
}
public static void Main()
{
int n = 10;
Console.Write(sequence(n));
}
}
|
PHP
<?php
function sequence( $n )
{
$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 ];
}
$n = 10;
echo (sequence( $n ));
?>
|
Javascript
<script>
function sequence(n)
{
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];
}
let n = 10;
document.write(sequence(n));
</script>
|
Output :
6
Time complexity: O(n)
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...