Binary to Gray code using recursion

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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".

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

1110011

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



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : jit_t, Shivam_k