📜  门|门 IT 2008 |第 80 题

📅  最后修改于: 2021-09-24 05:18:41             🧑  作者: Mango

考虑下面用 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 提供

这个问题的测验