📜  使用递归将二进制代码转换为等效格雷码的Java程序

📅  最后修改于: 2022-05-13 01:55:35.790000             🧑  作者: Mango

使用递归将二进制代码转换为等效格雷码的Java程序

使用递归将数字的二进制代码转换为等效的格雷代码。二进制是存储数字的默认方式,但在许多应用程序中,二进制数没有用,需要二进制的变体。格雷码具有两个连续数字仅相差一位的特性,用于 K-maps、纠错和通信。

例子:

Input:    1101
Output:    1011

Input:    11010001
Output:    10111001

方法#1:整数限制下的数字

算法:

  1. 如果 n=0,则灰色=0。
  2. 否则,如果最后两位彼此相反,则 gray = 1 + (10 * binaryToGray(n/10))。
  3. 否则,如果最后两位相同,则 gray = 10 * binaryToGray(n/10)

下面是上述方法的实现。

Java
// Java Program to Convert Binary Code
// Into Equivalent Gray Code Using Recursion
import java.io.*;
class GFG {
  
    // Function to change Binary Code
    // to Gray using Recursion
    public static int binaryToGray(int n)
    {
        if (n == 0) {
            return 0;
        }
        // Extracting the last digit
        int a = n % 10;
        // Extracting the second last digit
        int b = (n / 10) % 10;
        // Else If last two digits
        // are opposite bits to each other
        if ((a & ~b) == 1 || (~a & b) == 1) {
            return (1 + 10 * binaryToGray(n / 10));
        }
        // Else If the last
        // two bits are same
        return (10 * binaryToGray(n / 10));
    }
    // Driver's Function
    public static void main(String[] args)
    {
        int binaryNumber = 11010001;
        int result = binaryToGray(binaryNumber);
        System.out.println("Gray Code is " + result);
    }
}


Java
// Java Program to Convert Binary Code
// Into Equivalent Gray Code Using Recursion
import java.io.*;
class GFG {
    // XOR two numbers
    public static char xor(char a, char b)
    {
        if (a == b)
            return '0';
        else
            return '1';
    }
    // Recursive function Gray code conversion
    public static char[] ans(char[] kp, String str, int i)
    {
        if (i == str.length())
            return kp;
        kp[i] = xor(str.charAt(i), str.charAt(i - 1));
        i++;
        return ans(kp, str, i);
    }
    // Driver Program
    public static void main(String args[])
    {
        String str = "01001";
        char[] kp = new char[str.length()];
        kp[0] = str.charAt(0);
        
        // Recursive function call
        ans(kp, str, 1);
  
        // Print Gray Code
        System.out.print("Gray Code is ");
        for (char i : kp)
            System.out.print(i + "");
    }
}


输出
Gray Code is 10111001

方法#2:大二进制数

算法:

  1. 以字符串格式输入。
  2. 在递归函数中传递当前指针。
  3. 将第 i 位和第 (i-1) 位的 XOR 存储到数组中。
  4. 在递归结束时返回数组。

下面是上述方法的实现。

Java

// Java Program to Convert Binary Code
// Into Equivalent Gray Code Using Recursion
import java.io.*;
class GFG {
    // XOR two numbers
    public static char xor(char a, char b)
    {
        if (a == b)
            return '0';
        else
            return '1';
    }
    // Recursive function Gray code conversion
    public static char[] ans(char[] kp, String str, int i)
    {
        if (i == str.length())
            return kp;
        kp[i] = xor(str.charAt(i), str.charAt(i - 1));
        i++;
        return ans(kp, str, i);
    }
    // Driver Program
    public static void main(String args[])
    {
        String str = "01001";
        char[] kp = new char[str.length()];
        kp[0] = str.charAt(0);
        
        // Recursive function call
        ans(kp, str, 1);
  
        // Print Gray Code
        System.out.print("Gray Code is ");
        for (char i : kp)
            System.out.print(i + "");
    }
}
输出
Gray Code is 01101

时间复杂度: O(N),其中 N 是二进制代码的长度。