Código binario a gris usando recursividad

Dado el código binario de un número como un número decimal, necesitamos convertirlo en su Código Gray equivalente . 
Ejemplos: 
 

Input : 1001 
Output : 1101

Input : 11
Output : 10

En código gris, solo se cambia un bit en 2 números consecutivos. 
 

Algoritmo: 
 

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

A continuación se muestra la implementación del enfoque anterior: 
 

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>

Producción : 
 

1110011

Suponga que el número binario está en el rango de enteros. Para un valor mayor, podemos tomar un número binario como string.
 

Publicación traducida automáticamente

Artículo escrito por Shahnawaz_Ali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *