Tail recursion is when no instruction follows recursive call and calling function returns immediately after it:
int foo(int x)
{
//.............
return foo(x-1);
}
Did you know that there exist stack optimisation opportunities in this case? So if compiler supports it then tail recursion is as 'bad' as iteration