您的位置:首页 > 编程语言 > C语言/C++

C语言通过递归实现反向计算

2013-12-06 16:44 375 查看
问题:编写一个程序,将一个整数转换为二进制形式。

分析:一般来讲,对于数值n,其二进制数的最后一位是n % 2,因此计算出的第一个数字恰好是需要输出的最后一位数字。我们使用一个递归函数实现,在函数中,首先在递归调 用之前计算n % 2的数值,然后在递归调用语句之后进行输出。这样,计算出的第一个数值反而在最后一位输出。为了得出下一个数字,需要把原数值除以2(相当于在十进 制下把小数点左移一位)。如果此时得出的数值是偶数,则下一个二进制位的数值是0;若得出的是奇数,则下一个二进制位的数值就是1。例如:5是奇数,因此最低位一定 是1,5/2的数值是2(整数除法),所以下一位值是0。这时已经得到了数值01。重复上述计算,即使用2除以2得出1,而1
% 2的数值是1,因此下一位值是1。这时得到的数 值是101。当被2除的结果小于2时,说明已计算至最后一位二进制位,因此此时停止计算。

程序:[code]#include <stdio.h>
void to_binary(unsigned long);

int main(void)
{
unsigned long number;
printf("Enter an integer (q to quit): \n");
while (scanf("%ul", &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('0' + r);
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: