1
votes

Quoting from wikipedia

...a tail call is a subroutine call performed as the final action of a procedure. If a tail call might lead to the same subroutine being called again later in the call chain, the subroutine is said to be tail-recursive, which is a special case of recursion.

Now I've the following routine written in C

 int foo (int x){
      if ( x > 100)
          return x-10;
      else 
          return foo(foo(x+11));
 }

Based on the definition above, it seems to me that foo should be a tail recursive function since it recursive call is the final action of the procedure, but somewhere I've once read that this is not a tail recursive function.

Hence the question:

why isn't this function tail-recursive?

1

1 Answers

1
votes

This function is typically not considered tail-recursive, because it involves multiple recursive calls to foo.

Tail recursion is particularly interesting because it can be trivially rewritten (for example by a compiler optimization) into a loop. It is not possible to completely eliminate recursion with this tail-call-optimization technique in your example, and thus one would not consider this function as tail-recursive, even if its last statement is a recursive call.