Line 1: Line 1:
Q.42 What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that  
+
What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.  
the first parameter is passed by reference, whereas the second parameter is passed by value.  
+
 
 
  <syntaxhighlight lang="c">
 
  <syntaxhighlight lang="c">
 
int f (int &x, int c) {  
 
int f (int &x, int c) {  

Revision as of 19:05, 5 February 2014

What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.

<syntaxhighlight lang="c">

int f (int &x, int c) {

c = c - 1; 
if (c==0) return 1; 
x = x + 1; 
return f(x,c) * x; 

} </syntaxhighlight > (A) 3024

(B) 6561

(C) 55440

(D) 161051

Solution

In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point. The correct code must replace

return f(x,c) * x; 

with

res = f(x,c);
return res * x;

In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But, because of pass by reference, in all the previous functions, x is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.




blog comments powered by Disqus

What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.

<syntaxhighlight lang="c">

int f (int &x, int c) {

c = c - 1; 
if (c==0) return 1; 
x = x + 1; 
return f(x,c) * x; 

} </syntaxhighlight > (A) 3024

(B) 6561

(C) 55440

(D) 161051

Solution[edit]

In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point. The correct code must replace

return f(x,c) * x; 

with

res = f(x,c);
return res * x;

In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But, because of pass by reference, in all the previous functions, x is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.




blog comments powered by Disqus