Consider the following program:
int f( int *p, int n) { if (n <= 1) return 0; else return max(f(p+1,n-1),p[0]-p[1]); } int main() { int a[] = {3,5,2,6,4}; printf ( "%d" , f(a,5)); } |
Note: max(x,y) returns the maximum of x and y. The value printed by this program is
(A) 2
(B) 3
(C) 4
(D) 5
Answer: (B)
Explanation:
Look at the recursion stack of the given code in the below image. Assuming that the base address of array starts from 1000 and an integer takes 4 Bytes.
After the last recursive call f(1016,1) returns, in the previous call we will have return max(0,2) and then return max(2,-4) and then return max(2,3) and then finally return max(3,-2) = 3.
This solution is contributed by Pranjul Ahuja
Quiz of this Question