函数递归在处理倒序问题时比循环更加方便。在二进制中,奇数的末尾一定为1,偶数的末尾一定为0,通过5%2即可确定5的二进制位数的最后一位是1还是0.由此,计算机中的第一位十进制数实际上是带输出的二进制数的最后一位,由此我们说这是典型的倒序问题。那么,如何获得倒数第二位二进数数了?将原数除以2,这种方式相当于在十进制下除以10将小数点左移一位。上述方法可类比与十进制中:628%10得8,8为该书的最后一位;628/2得62,而62%2得2,所以为该数的下一位。
递归思路:1. 键盘读取计算机上的十进制数,将其除以2取余,余数保存在r中;
2. if设置退出递归条件要求n大于等于2,再次进入函数;
3. r与0比较,等于0输出0,等于1输出1;
#include<stdio.h>
void to_binary(unsigned long n);
int main(void)
{
unsigned long number;
printf("Enter an integer (q to quit):\n");
while (scanf("%d", &number) == 1)
{
printf("Binary equivalent:");
to_binary(number);
putchar('\n');
printf("Enter an integer (q to quit):\n");
}
printf("Done.\n");
return 0;
}
void to_binary(unsigned long n)
{
int r;
r = n % 2;
if (n >= 2)
to_binary(n / 2);
putchar(r == 0 ? '0' : '1');
}