Skip to content
Related Articles

Related Articles

Newman-Conway Sequence
  • Difficulty Level : Easy
  • Last Updated : 25 Apr, 2018

Newman-Conway Sequence is the one which 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 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.
?>



Output :

6



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.
?>



Output :

6

Time Complexity : O(n)

References : https://archive.lib.msu.edu/crcmath/math/math/n/n078.htm

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up
Recommended Articles
Page :