Consider the code fragment written in C below: void f(int n) { if (n <= 1) {…

2008

Consider the code fragment written in C below:

void f(int n)
{
    if (n <= 1) {
        printf("%d", n);
    }
    else {
        f(n / 2);
        printf("%d", n % 2);
    }
}

Which of the following implementations will produce the same output for f(173) as the above code?

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);
    }
}

Answer: C. P1 onlyCorrect answer: P1 only. Original function: It first calls f(n / 2) and then prints n % 2, so it prints the binary representation from the most significant…

  1. A.

    Both P1 and P2

  2. B.

    P2 only

  3. C.

    P1 only

  4. D.

    Neither P1 nor P2

Attempted by 63 students.

Show answer & explanation

Correct answer: C

Correct answer: P1 only.

  • Original function: It first calls f(n / 2) and then prints n % 2, so it prints the binary representation from the most significant bit to the least significant bit. For 173, the output is 10101101.

  • P1: The condition if (n / 2) recurses while n / 2 is nonzero. It still prints n % 2 after the recursive call returns, so the bit order matches the original function.

  • P2: P2 prints n % 2 before the recursive call. That prints the least significant bits first, giving the reverse order for 173, so it does not match the original output.

  • Conclusion: Only P1 produces the same output as the original function.

Explore the full course: Iocl Engineers Officers Grade A Paper 2

Loading lesson…