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.

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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



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

Article Tags :
Practice Tags :

1

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.