这个题,就是选择答案D。
图中,if(n/2)其实就是等价于if(n/2!=0),考虑到n是正数,它也就等价于if(n>1)
总之,
第一次调用,就满足条件,进行递归调用:fun(5)…………
具体见图所示(一个红框,就是一次函数调用):
依输出的先后次序,总的输出就是:1010
打印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。
printf语句是不会被执行的吧?因为调用啊,执行到fun时,就转去调用,所以直到条件为假时,printf才会被执行啊
难道不是这么做的吗?
追答条件为真的不是不执行,而是被压入栈,暂不执行,
条件为假后,要依次出栈执行,前面我说得已经
很明白了。