Код вывода OP находится в неправильном порядке, так как необходимо выполнить повторение перед печатью, чтобы сначала напечатать наиболее значимые цифры.
Вместо
printf ("1"); // prints least significant digit
biner (a / 2); // prints most significant digits
Больше похоже на
biner (a / 2); // prints most significant digits
printf ("1"); // prints least significant digit
Нет необходимости возвращать значение, пусть biner()
может выполнить всю печать.
Поскольку код не пытается напечатать знак , возможно, как хорошо используйте unsigned a
.
Код OP повторяется бесконечно, если a == 0
. Рекурсировать только если a >= 1
. (двоичный файл di git существует слева.)
С d
в качестве 0 или 1, двоичный файл di git для печати может использовать putchar('0' + d)
Предлагаемое упрощение:
#include <stdio.h>
void biner(unsigned a) {
if (a > 1) { // Do binary digits exist to the left?
biner(a/2); // Print them.
}
putchar('0' + a%2); // Now print the least significant digit.
}
int main(void) {
unsigned a;
printf("Masukan angka ");
scanf("%u", &a);
biner(a);
putchar('\n');
}