代码:
[root@rhel6164 c_language]$ cat test.c
#include <stdio.h>
void to_binary(int);
int main(void)
{
int input_number;
printf("Please input one integer: ");
scanf("%d", &input_number);
to_binary(input_number);
printf("\n");
return 0;
}
void to_binary(int n)
{
int r;
r = n % 2;
if ( n >= 2 )
to_binary(n/2);
//putchar('0' + r); //先计算'0'和r的值,然后转换为相应的ASCII打印出字符
putchar(r?'1':'0'); //三元运算符,如果r为1,就打印字符'1',如果r为0,就打印字符'0'
}编译&运行:
[root@rhel6164 c_language]$ gcc ./test.c
[root@rhel6164 c_language]$ ./a.out
Please input one integer: 10
1010
这里简单分析一下递归函数的执行过程,我就用输入的数字n为4来说明,当第一次调用to_binary函数的时候,r为0,判断n的值大于或等于2,然后用n/2(也就是2)来再次调用to_binary函数,r也为0,判断if,n/2(也就是2)也是大于或等于2的,再次用n/2(也就是1)来调用to_binary函数,这时实际参数n为1,求得r也为1,判断if不成立,就不再调用to_binary函数,并依次返回to_binary函数并执行未完成的函数部分,相应的依次执行putchar函数,从左边最高位开始打印0或者1字符。
有一种最简单的递归函数称为尾递归或者结尾递归,也就是把递归调用放到函数结尾或者return函数之前,相当于循环语句。
本文通过实例分析递归函数如何实现整数到二进制的转换。以输入数字4为例,详细阐述递归过程,解释每次调用时参数的变化,直至递归结束并返回结果,从左到右打印出二进制数字。同时提及尾递归的概念,将其与循环语句相比较。
751

被折叠的 条评论
为什么被折叠?



