过程详细点!

来源:百度知道 编辑:UC知道 时间:2024/05/13 04:56:38
# include <stdio.h>
bin(int x)
{
if(x/2>0)
bin(x/2);
printf("%d",x%2);
}
main()
{
bin(12);
}
(A) 1100 (B) 1000 (C) 12 (D) -12

这到题是用递归的方法将一个十进制数转换成二进制.
如果不太明白递归,就看看下面的说明:
这个程序的递归条件就是x/2>0.每次递归将x/2,返回时输出当前x%2的值.

程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。

答案是A

bin(12) x/2 > 0
-->bin(6) x/2 > 0
-->bin(3) x/2 > 0
-->bin(1) x/2 == 0
开始返回,printf( 1%2) //输出1
返回bin(3)的printf语句,printf( 3%2 ) //输出1
返回bin(6)的printf语句,printf( 6%2 ) //输出0
返回bin(12)的printf语句,printf( 12%2 ) //输出0