Java 程序:使用递归将一个数的二进制码转换成等价格雷码

原文:https://www.studytonight.com/java-programs/java-program-to-convert-binary-code-of-a-number-into-its-equivalent-grays-code-using-recursion

在本教程中,我们将学习如何使用递归将数字的二进制代码转换为其等效的格雷代码。格雷码是一种二进制数字系统,其中两个连续值仅相差一位。递归函数是调用自身的函数。但是在继续之前,如果你不熟悉 java 中方法的基本概念,那么一定要查看主题为 java 中方法的文章。

输入:输入二进制数:1110

输出:等效格雷码为:1001

程序 1:用递归把一个数的二进制码转换成它的等价格雷码

在这个例子中,我们将看到当数字在整数限制内时,如何使用递归将数字的二进制代码转换成它的等价格雷码。

算法:

  1. 开始
  2. 创建扫描仪类的实例。
  3. 声明一个变量来存储二进制数。
  4. 要求用户初始化变量。
  5. 声明一个用户定义的方法来将二进制代码转换为格雷码。
  6. 如果数字为 0,则返回 0。
  7. 提取最后一个数字和第二个数字。
  8. 否则,如果最后两位是相反的,那么 gray = 1+(10 * binary gray(number/10))。
  9. 否则,如果最后两位相同,那么 gray = 10 * binaryToGray(数字/10)
  10. 显示结果。
  11. 停止

下面的例子说明了上述算法的实现。

//Java Program to Convert Binary Code Into 
//Equivalent Gray Code Using Recursion
import java.util.*;

public class Main 
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the binary number: ");
        int bNumber = sc.nextInt();
        int res = bToGray(bNumber);
        System.out.println("Gray Code is " + res);
    }
     public static int bToGray(int num)
    {
        if (num == 0) 
        {
            return 0;
        }
        // Extracting the last digit
        int x1 = num % 10;
        // Extracting the second last digit
        int x2 = (num / 10) % 10;
        // Else If last two digits
        // are opposite bits to each other
        if ((x1 & ~x2) == 1 || (~x1 & x2) == 1) {
            return (1 + 10 * bToGray(num / 10));
        }
        // Else If the last
        // two bits are same
        return (10 * bToGray(num / 10));
    }
}

输入二进制数:1101 格雷码为 1011

程序 2:用递归把一个数的二进制码转换成它的等价格雷码

在这个例子中,我们将看到当输入大的二进制数时,如何使用递归将数字的二进制码转换成它的等价格雷码。

算法:

  1. 开始
  2. 创建扫描仪类的实例。
  3. 声明一个变量以字符串格式存储二进制数。
  4. 要求用户初始化变量。
  5. 声明一个用户定义的函数来求两个数的异或。
  6. 递归调用函数,找到输入数字的格雷码。
  7. 显示结果。
  8. 停止

下面的例子说明了上述算法的实现。

//Java Program to Convert Binary Code Into 
//Equivalent Gray Code Using Recursion
import java.util.*;

public class Main 
{
   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[] ch, String str, int i)
    {
        if (i == str.length())
            return ch;
        ch[i] = xor(str.charAt(i), str.charAt(i - 1));
        i++;
        return ans(ch, str, i);
    }
    // Driver Program
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
         System.out.println("Enter Binary number:");
        String str = sc.nextLine();
        char[] ch = new char[str.length()];
        ch[0] = str.charAt(0);

        // Recursive function call
        ans(ch, str, 1);

        // Print Gray Code
        System.out.print("Gray Code is ");
        for (char i : ch)
            System.out.print(i + "");
    }
}

输入二进制数:1110011 格雷码为 1001010