6个回答
展开全部
打印1010。
这是递归函数,每次执行到调用自己的时候,要等调用的那个执行完才会返回继续执行下一条语句。
也就是说
if(n/2)fun(n/2);//每一次调用自己的这一句执行结束,才会执行下面的打印。
printf("%d",n%2);
所以每一层都会打印自己的变量n%2的值。而最先执行打印的是最里一层的调用,整个执行过程分别是fun(10)->fun(5)->fun(2)->fun(1)。
既打印1%2,2%2,5%2,10%2,也就是1010。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
考你递归的用法:
10送入fun(10)
void fun(int n)
{
if(n/2)fun(n/2);//自身调用部分
printf("%d",n%2);//压栈部分
}
n/2=5,条件为真,调用函数fun(5),printf("%d",10%2);被压栈
n/2=2,条件为真,调用函数fun(2),printf("%d",5%2);被压栈
n/2=1,条件为真,调用函数fun(1),printf("%d",2%2);被压栈
n/2=0,条件为假,打印printf("%d",1%2);也就是1
由于栈是先进后出的,所以反相出栈,打印printf("%d",2%2);也就是0
然后打印printf("%d",5%2);也就是1
然后打印printf("%d",10%2);也就是0
所以结果为:1010
10送入fun(10)
void fun(int n)
{
if(n/2)fun(n/2);//自身调用部分
printf("%d",n%2);//压栈部分
}
n/2=5,条件为真,调用函数fun(5),printf("%d",10%2);被压栈
n/2=2,条件为真,调用函数fun(2),printf("%d",5%2);被压栈
n/2=1,条件为真,调用函数fun(1),printf("%d",2%2);被压栈
n/2=0,条件为假,打印printf("%d",1%2);也就是1
由于栈是先进后出的,所以反相出栈,打印printf("%d",2%2);也就是0
然后打印printf("%d",5%2);也就是1
然后打印printf("%d",10%2);也就是0
所以结果为:1010
更多追问追答
追问
printf语句是不会被执行的吧?因为调用啊,执行到fun时,就转去调用,所以直到条件为假时,printf才会被执行啊
难道不是这么做的吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个把十进制数n转换为二进制数的程序,选择答案d。程序的运行是这样的,里面判断语句的功能就是说,如果n除以2的值大于0,就进行递归调用。这个语句也可以写成为如果n大于1就进行递归调用。等到递归调用返回时,再输出这个n除以2的余数,但是这个操作是要等递归调用返回后才输出的,所以是最后一次调用的时候的输出是最靠前的。这样就实现了反向除二取余数的功能,也就是说把n转换为二进制进行输出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
四题选项B和D明显是相反条件啊,你只要判断出D是等价的,B肯定就是不等价的啊。
再说题意,while( E ) 就是说只有E的值为0的时候,条件判断结果为:false
D选项中 ( E != 0 ),当 E 的值为 0 的时候,条件判断为假:false----等价
B选项中 ( E == 0 ), 当 E 的值为 0 的时候,条件判断为真:true----不等价
综上,选B
再说题意,while( E ) 就是说只有E的值为0的时候,条件判断结果为:false
D选项中 ( E != 0 ),当 E 的值为 0 的时候,条件判断为假:false----等价
B选项中 ( E == 0 ), 当 E 的值为 0 的时候,条件判断为真:true----不等价
综上,选B
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询