1、基本递归实现
最直接的方法,通过不断地将整数除以2并获取其余数来构造二进制表示。
#include <stdio.h>
void printBinary(int n) {
if (n > 1) {
printBinary(n / 2);
}
printf("%d", n % 2);
}
int main() {
int number = 10;
printf("Binary representation of %d is: ", number);
printBinary(number);
return 0;
}
2、尾递归优化
尾递归是一种特殊的递归形式,优化后可以减少函数调用的开销。这里使用辅助函数来实现尾递归。
#include <stdio.h>
void printBinaryTailRecursive(int n, char *binary, int index) {
if (n > 1) {
printBinaryTailRecursive(n / 2, binary, index - 1);
}
binary[index] = '0' + (n % 2);
}
void printBinary(int n) {
char binary[32];
printBinaryTailRecursive(n, binary, 31);
binary[32] = '\0';
printf("%s", binary + (32 - (int)log2(n) - 1));
}
int main() {
int number = 10;
printf("Binary representation of %d is: ", number);
printBinary(number);
return 0;
}
3、通过位运算的递归实现
利用位运算符,可以直接获取一个整数的最低位(二进制位)。
#include <stdio.h>
void printBinaryBitwise(int n) {
if (n > 1) {
printBinaryBitwise(n >> 1);
}
printf("%d", n & 1);
}
int main() {
int number = 10;
printf("Binary representation of %d is: ", number);
printBinaryBitwise(number);
return 0;
}
4、使用递归反向构建二进制字符串
在递归调用的返回阶段逐步构建最终的二进制字符串。
#include <stdio.h>
#include <string.h>
void buildBinaryString(int n, char *binary, int index) {
if (n > 0) {
binary[index] = '0' + (n % 2);
buildBinaryString(n / 2, binary, index - 1);
}
}
void printBinary(int n) {
char binary[32] = {0};
buildBinaryString(n, binary, 31);
printf("%s", binary + (31 - (int)log2(n)));
}
int main() {
int number = 10;
printf("Binary representation of %d is: ", number);
printBinary(number);
return 0;
}
5、使用递归计算反向二进制并反转输出
先计算出反向的二进制表示,然后反转字符串输出。
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
int n = strlen(str);
for (int i = 0; i < n / 2; i++) {
char temp = str[i];
str[i] = str[n - i - 1];
str[n - i - 1] = temp;
}
}
void buildBinaryReverse(int n, char *binary, int index) {
if (n > 0) {
binary[index] = '0' + (n % 2);
buildBinaryReverse(n / 2, binary, index + 1);
}
}
void printBinary(int n) {
char binary[32] = {0};
buildBinaryReverse(n, binary, 0);
reverse(binary);
printf("%s", binary);
}
int main() {
int number = 10;
printf("Binary representation of %d is: ", number);
printBinary(number);
return 0;
}