edited by
13,554 views
27 votes
27 votes

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}$

edited by

5 Answers

Best answer
32 votes
32 votes

Correct Option: 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$.

edited by
16 votes
16 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.

2 votes
2 votes

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

1 votes
1 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)
Answer:

Related questions

19.9k
views
5 answers
53 votes
Kathleen asked Sep 22, 2014
19,873 views
double foo(int n) { int i; double sum; if(n == 0) { return 1.0; } else { sum = 0.0; for(i = 0; i < n; i++) { sum += foo(i); } return sum; } }The space complexity of the above code is?$O(1)$O(n)$O(n!)$n^n$
11.3k
views
5 answers
38 votes
go_editor asked Nov 14, 2016
11,278 views
double foo(int n) { int i; double sum; if(n == 0) { return 1.0; } else { sum = 0.0; for(i = 0; i < n; i++) { sum += foo(i); } return ... $O(n)$O(n^2)$n!$
5.7k
views
2 answers
18 votes
go_editor asked Apr 21, 2016
5,726 views
Consider the following recursive C function that takes two arguments.unsigned int foo(unsigned int n, unsigned int r) { if (n>0) return ((n%r) + foo(n/r, r)); else return 0; ... text{foo}$ when it is called as $\text{foo(513, 2)}$?$9$8$5$2$
12.1k
views
5 answers
27 votes
go_editor asked Sep 30, 2014
12,058 views
What is the value printed by the following C program?#include<stdio.h> int f(int *a, int n) { if (n <= 0) return 0; else if (*a % 2 == 0) return *a+f(a+1, n-1); else ... $5$15$19$