考虑下面用 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 提供。
这个问题的测验