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