考虑下面用C编写的代码片段:
void f (int n)
{
if (n <= 1) {
printf ("%d", n);
}
else {
f (n/2);
printf ("%d", n%2);
}
}
以下哪个实现将为f(173)产生与上述代码相同的输出?
P1
void f (int n)
{
if (n/2) {
f(n/2);
}
printf ("%d", n%2);
}
P2
void f (int n)
{
if (n <=1) {
printf ("%d", n);
}
else {
printf ("%d", n%2);
f (n/2);
}
}
(A) P1和P2
(B)仅P2
(C)仅P1
(D) P1和P2都不答案: (C)
解释:
基本上,函数f打印数字的二进制表示形式。
函数f1还打印数字的二进制表示形式
函数f2打印二进制表示形式,但顺序相反。
f的输出是:-10101101
f1的输出是:-10101101
f2的输出是:-10110101
因此,答案是选项(C),它仅是P1。
该解决方案由Anil Saikrishna Devarasetty提供。
这个问题的测验