[题目]以二进制形式打印十进制整数(除2取余、逆序输出)
[递归]
在递归程序中,起初一直没有明白为什么是直接输出,自己理解成需要建立一个数组将取余后的结果保存,然后逆序输出,但是其实这样就是完全理解错误了递归算法。
递归最重要的一点就是倒序输出!
举个例子:假设有一条函数调用链---recursion1()调用recursion2()、recursion2()调用recursion3()、recursion3()调用recursion4()。当recursion4()执行结束(条件不满足继续调用)时,控制转回recursion3();当recursion3()结束时,控制转回recursion2();当recursion2()结束时,控制转回recursion1(),这就是递归,不过在递归中所有的函数都是recursion()。
同时,在整个执行过程中,每级函数都有自己的变量,它们使用同一个变量名,但是对应于不同的数值,因此每一级程序返回时,都是不同的数值。
示例程序:
/* 以二进制形式打印整数 */
#include<stdio.h>
void to_binary(unsigned long n);
int main()
{
unsigned long number;
printf("please enter an integer (q to quit ):\n");
while (scanf("%lu", &number) == 1)
{
printf("binary equivalent: ");
to_binary(number);
putchar('\n');
printf("please 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);
}
else;
printf("%d", r);
//putchar(r == 0 ? '0' : '1'); 占内存较多
}