100k views
2 votes
Can we use the tail-call optimization in this function? If no, explain why not. If yes, what is the difference in the number of executed instructions in f with and without the optimization?int f(int a, int b, int c, int d){return g(g(a,b),c+d);}

User Beartech
by
8.3k points

1 Answer

4 votes
The function f in the provided code snippet does not appear to be suitable for tail-call optimization.

Tail-call optimization is a compiler optimization technique that allows a function's call to be replaced with a jump, in order to optimize the use of the call stack. This optimization can only be applied when the result of the recursive call is the final result of the function, and no further computation is needed after the recursive call returns.

In the function f(a, b, c, d), the return value of g(a, b) is passed as the argument to another call to g along with c + d as its second argument. The function f then returns the result of this second call to g. Since the result of the recursive call is not the final result of f, and further computation is needed (i.e., adding c + d to the result of g(a, b)), tail-call optimization cannot be applied in this case.

As a result, there would be no difference in the number of executed instructions in f with or without tail-call optimization, because tail-call optimization is not applicable to this function.
User Joe Pigott
by
8.2k points