c - 递归地将十进制数转换为二进制数

标签 c recursion

在家庭作业中,我被要求创建一个递归函数,它接受一个 int 和一个 int 指针,并打印第一个 int 的二进制表示形式,并在指针的目的地留下二进制中的个数。

它适用于某些值 - 65 和 99 有效 - 但不适用于大多数其他值(负数在问题域之外)。我不知道为什么。

void binaryPrinter(int value, int *numberOfOnes)
{
    int thisbit;

    //printf("Value is %i",value);

    if (value <= 0) { 
        printf("%i",value);
        return;
    } else if (value == 1){
        printf("1");
        *numberOfOnes = *numberOfOnes + 1;
        return;
    }


    thisbit = value % 2;
    if (thisbit) { *numberOfOnes = *numberOfOnes + 1; }
    printf("%i",thisbit);
    binaryPrinter(value / 2, numberOfOnes);
}

为什么?

最佳答案

因为您首先打印最低有效位,即您正在反向打印数字。

65和99是二进制回文,所以结果没问题。

调用(并打印)高阶位后打印当前位的结果。

// rest of the function as before, but at the very end...

binaryPrinter(value / 2, numberOfOnes);
printf("%i",thisbit);

关于c - 递归地将十进制数转换为二进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24399486/

相关文章:

C: 在自动变量上调用 free?

c - 用于基于刻度的模拟的简单图形库

c - 这是 printf 函数的未定义行为吗?

c - freeBSD中rqhead类的定义在哪里?

c++ - CPP预处理器到C预处理器的转换问题

python - 向下传递参数的递归函数

c - 无限期地扩展内部 for 循环调用

algorithm - 与我已经证明的相比,有人可以为我提供更好的冒泡排序证明和场景吗

c++ - 如何递归读取文件而不是 while 循环?

c - 在大多数情况下,递归函数使用的内存是否是 C 中迭代函数的两倍?