Recursion is where a function calls itself (you can also get mutually recursive functions where two recurse into each other, e.g. f(){g();} g(){f();}). Can you find a function where this happens? (Yeah I know, here I go again. But if I just say "Yes" or "No" then you won't learn how to spot whether or not recursion is happening, and the point of the exercise is that you learn how to spot, not that you learn how to get others to answer questions for you. If you want to learn that then drop programming and get into a management class instead.)

push cannot convert ItemType to int, that's correct. You define push as a function that takes an int:
void push(int v){st[++top]=v;}
but you call it with an ItemType rather than an int:
ItemType item;
So to fix the error you need to change push() to take an ItemType, or change the call to pass an int.

print_reverse does not take 0 arguments.
This is quite self explanatory. How many arguments does print_reverse() have, in its definition, and what are they for? How many are you calling it with? Is there a difference?