使用递归将二进制代码转换为等效格雷码的Java程序
使用递归将数字的二进制代码转换为等效的格雷代码。二进制是存储数字的默认方式,但在许多应用程序中,二进制数没有用,需要二进制的变体。格雷码具有两个连续数字仅相差一位的特性,用于 K-maps、纠错和通信。
例子:
Input: 1101
Output: 1011
Input: 11010001
Output: 10111001
方法#1:整数限制下的数字
算法:
- 如果 n=0,则灰色=0。
- 否则,如果最后两位彼此相反,则 gray = 1 + (10 * binaryToGray(n/10))。
- 否则,如果最后两位相同,则 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:大二进制数
算法:
- 以字符串格式输入。
- 在递归函数中传递当前指针。
- 将第 i 位和第 (i-1) 位的 XOR 存储到数组中。
- 在递归结束时返回数组。
下面是上述方法的实现。
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 是二进制代码的长度。