in Algorithms edited by
5,485 views
18 votes
18 votes

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

What is the return value of the function $\text{foo}$ when it is called as $\text{foo(513, 2)}$?

  1. $9$
  2. $8$
  3. $5$
  4. $2$
in Algorithms edited by
5.5k views

3 Comments

same Q appeared in ISRO 2020
1
1
Can anyone confirm time complexity will be $\large O(log_{2}n)$
2
2
edited by

Base must be r.

0
0

2 Answers

28 votes
28 votes
Best answer
The function returns the sum of digits in a binary representation of the given number

so $1+0+0+0+0+0+0+0+0+1 = 2$

Correct Answer: $D$
edited by

1 comment

if you simulate this program with different values of n and r, notice that this function foo(n,r) gives the sum of digits of n(when it is converted to base r).

Like if n=513, r=14 then $(513)_{10}=(289)_{14}$ and 2+8+9=19 and this is the output of the program.
10
10
9 votes
9 votes

Final return value is 2 So option d

Answer:

Related questions