The Gateway to Computer Science Excellence
First time here? Checkout the FAQ!
x
+14 votes
2k views

Consider the following C-program:

void foo (int n, int sum) {
    int k = 0, j = 0;
    if (n == 0) return;
    k = n % 10; j = n/10;
    sum = sum + k;
    foo (j, sum);
    printf ("%d,",k);
}

int main() {
    int a = 2048, sum = 0;
    foo(a, sum);
    printf("%d\n", sum);
}

What does the above program print?

  1. $\text{8, 4, 0, 2, 14}$

  2. $\text{8, 4, 0, 2, 0}$

  3. $\text{2, 0, 4, 8, 14}$

  4. $\text{2, 0, 4, 8, 0}$

asked in Algorithms by Veteran (59.5k points)
edited by | 2k views

4 Answers

+16 votes
Best answer

Option is D.

$foo$ is printing the lowest digit. But the $printf$ inside it is after the recursive call. This forces the output to be in reverse order

$2, 0, 4, 8$

The final value $sum$ printed will be $0$ as $C$ uses pass by value and hence the modified value inside $foo$ won't be visible inside $main$.

answered by Active (3.3k points)
edited by
0
@Arjun sir plzz elaborate this solution.
0
@Neha Singh

just execute a program in pen and paper u will get D as an answer...
+6 votes

Quick soln :-Option Elimination

We will try to analyse o/p from last.

Last line of program is to print sum which is passed by value so it will retain its value 0. So option A & C eliminated.

Now call foo(2048,0) which push 8 into stack first so it will pop at last so 8 will print as 2nd last o/p.

Hence B is eliminated and Option D is Ans.

answered by Boss (22.7k points)
0 votes
the last print statement to be executed is in the main(). Since every time foo() is called, we are doing pass by value, the value stored in variable sum is local to foo() function calls.

So when control returns to main(), the value of sum will be 0. (as initialized in main()'s body). That eliminates (a) & (c).

Recursive calls(values stored in stack -> LIFO) on foo(), when returned is printing k values in the reverse order : 2->0->4->>8

Hence, answer : (d)
answered by Active (2.1k points)
0 votes

Since one recursion call is there, we can use stack approach

answered by Active (2.1k points)


Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true

38,112 questions
45,620 answers
132,318 comments
49,301 users