递归和倒序计算 |
| |
解决问题:打印一个整数的二进制数。 分析: 在二进制中,奇数的末尾一定是1,偶数的末尾一定是0。一般而言,对于数字n,其二进制的最后一位是n %2。因此,计算的第一位数字实际上是待输出二进制数的最后一位。所以,在递归函数的递归调用之前计算n%2,在递归调用之后打印计算结果。这样,计算的第一个值正好是最后一个打印的值。 代码如下: void to_binary (unsigned long n); int main (void) { unsigned long number; printf ("Enter an integer (q to quit):\n"); while (scanf("%lu", &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'); return; }
代码分析:
第二行:void to_binary (unsigned long n);
为递归函数的原型声明。
第八行:while (scanf("%lu", &number) == 1)
限制输入的数为正整数。
第20-30行:
void to_binary(unsigned long n)
{
...
}
为递归函数。
举例说明该递归函数:9%2=1不为0,即9的二进制位最后一位为1;此时9/2=4,4%2=0,则倒数第二位为0;此时4/2=2,2%2=0,则倒数第三位为0;此时2/2=1,1%2=1,第一位即倒数第四位为1,此时n<2,不再递归。结果为1001。
| ||
二进制形式打印整数
最新推荐文章于 2022-08-01 09:55:17 发布