Skip to content
Related Articles

Related Articles

Binary to Gray code using recursion
  • Last Updated : 14 Apr, 2021
GeeksforGeeks - Summer Carnival Banner

Given Binary code of a number as a decimal number, we need to convert this into its equivalent Gray Code
Examples : 
 

Input : 1001 
Output : 1101

Input : 11
Output : 10

In gray code, only one bit is changed in 2 consecutive numbers. 
 

Algorithm : 
 

binary_to_grey(n)
 if n == 0
       grey = 0;
 else if last two bits are opposite  to each other
       grey = 1 + 10 * binary_to_gray(n/10))
 else if last two bits are same
       grey = 10 * binary_to_gray(n/10))

Below is implementation of above approach : 
 

CPP




// CPP program to convert Binary to
// Gray code using recursion
#include <bits/stdc++.h>
using namespace std;
 
// Function to change Binary to
// Gray using recursion
int binary_to_gray(int n)
{
    if (!n)
        return 0;
 
    // Taking last digit
    int a = n % 10;
     
    // Taking second last digit
    int b = (n / 10) % 10;
         
    // If last digit are opposite bits
    if ((a && !b) || (!a && b))        
            return (1 + 10 * binary_to_gray(n / 10));
         
    // If last two bits are same
    return (10 * binary_to_gray(n / 10));
}
 
// Driver Function
int main()
{
    int binary_number = 1011101;
     
    printf("%d", binary_to_gray(binary_number));
    return 0;
}

Java




// Java program to convert
// Binary code to Gray code
import static java.lang.StrictMath.pow;
import java.util.Scanner;
 
class bin_gray
{
    // Function to change Binary to
    // Gray using recursion
    int binary_to_gray(int n, int i)
    {
        int a, b;
        int result = 0;
        if (n != 0)
        {
            // Taking last digit
            a = n % 10;
             
            n = n / 10;
             
            // Taking second last digit
            b = n % 10;
         
            if ((a & ~ b) == 1 || (~ a & b) == 1)
            {
                result = (int) (result + pow(10,i));
            }
             
            return binary_to_gray(n, ++i) + result;
        }
        return 0;
    }
 
    // Driver Function
    public static void main(String[] args)
    {
        int binary_number;
        int result = 0;
        binary_number = 1011101;
         
        bin_gray obj = new bin_gray();
        result = obj.binary_to_gray(binary_number,0);
         
        System.out.print(result);
    }
}
 
// This article is contributed by Anshika Goyal.

Python3




# Python3 code to convert Binary
# to Gray code using recursion
 
# Function to change Binary to Gray using recursion
def binary_to_gray( n ):
    if not(n):
        return 0
         
    # Taking last digit   
    a = n % 10
     
     # Taking second last digit
    b = int(n / 10) % 10
     
    # If last digit are opposite bits
    if (a and not(b)) or (not(a) and b):
        return (1 + 10 * binary_to_gray(int(n / 10)))
     
    # If last two bits are same
    return (10 * binary_to_gray(int(n / 10)))
 
# Driver Code
binary_number = 1011101
print( binary_to_gray(binary_number), end='')
 
# This code is contributed by "Sharad_Bhardwaj".

C#




// C# program to convert
// Binary code to Gray code
using System;
 
class GFG {
     
    // Function to change Binary to
    // Gray using recursion
    static int binary_to_gray(int n, int i)
    {
        int a, b;
        int result = 0;
        if (n != 0)
        {
             
            // Taking last digit
            a = n % 10;
             
            n = n / 10;
             
            // Taking second last digit
            b = n % 10;
         
            if ((a & ~ b) == 1 || (~ a & b) == 1)
            {
                result = (int) (result + Math.Pow(10,i));
            }
             
            return binary_to_gray(n, ++i) + result;
        }
         
        return 0;
    }
 
    // Driver Function
    public static void Main()
    {
        int binary_number;
        binary_number = 1011101;
         
        Console.WriteLine(binary_to_gray(binary_number,0));
    }
}
 
// This article is contributed by vt_m.

PHP




<?php
// PHP program to convert Binary to
// Gray code using recursion
 
// Function to change Binary to
// Gray using recursion
function binary_to_gray($n)
{
    if (!$n)
        return 0;
 
    // Taking last digit
    $a = $n % 10;
     
    // Taking second
    // last digit
    $b = ($n / 10) % 10;
         
    // If last digit are
    // opposite bits
    if (($a && !$b) || (!$a && $b))    
            return (1 + 10 * binary_to_gray($n / 10));
         
    // If last two
    // bits are same
    return (10 * binary_to_gray($n / 10));
}
 
    // Driver Code
    $binary_number = 1011101;
    echo binary_to_gray($binary_number);
 
// This code is contributed by Ajit
?>

Javascript




<script>
 
// JavaScript program to convert
// Binary code to Gray code
 
    // Function to change Binary to
    // Gray using recursion
    function binary_to_gray(n, i)
    {
        let a, b;
        let result = 0;
        if (n != 0)
        {
            // Taking last digit
            a = n % 10;
               
            n = n / 10;
               
            // Taking second last digit
            b = n % 10;
           
            if ((a & ~ b) == 1 || (~ a & b) == 1)
            {
                result =  (result + Math.pow(10,i));
            }
               
            return binary_to_gray(n, ++i) + result;
        }
        return 0;
    }
     
// Driver code                
        let binary_number;
        let result = 0;
        binary_number = 1011101;
           
        result = binary_to_gray(binary_number,0);
           
        document.write(result);
        
       // This code is contributed by code_hunt.
</script>

Output : 
 

1110011

Assume that the binary number is in the range of integer. For larger value we can take binary number as string.
 

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 :