Recursion and how it works on the stack

Blender Recursion GIF By Adampizurny — http://gph.is/2iOSPvH

What is recursion?

What is the object or what is it used for?

float _pow_recursion(float x, float y)
{
if (y == 0)
return (1);
if (y < 0)
return (_pow_recursion(x, y + 1) / x);
return (_pow_recursion(x, y - 1) * x);
}
int main (void)
{
float x;

x = _pow_recursion (2, 3);
return (EXIT_SUCCESS);
}
int main (void)
{
float x;

x = _pow_recursion (3.5, 3.8);
return (EXIT_SUCCESS);
}

Will it ever get to 0?

Why did this happened?