By definition, big O is the upper bound, so it would be O(n) (since O(n) is greater than O(lg(n)).
Read a little about big O and big theta
Big-oh vs big-theta
EDIT:
Assuming that the code would look something like:
foo(x,y)
{
if(y<0):
//call some other function, or throw an error, otherwise we're stuck in an infinite loop
else if(y==0):
return 1
else if(y%2!=0):
return x*foo(x,y-1)
else:
return foo(x,y/2)*foo(x,y/2)
}
Here, Big O is O(n), but technically speaking it would also be O(n^2), O(n^3), etc. This is because Big O is an upper bound.
Big Theta (the tight bound) is Theta(n).
Note that just because you may reduce y by dividing y/2, you don't reduce the calls to foo, since you are doing twice as many: foo*foo. Since you double your function calls, you don't get a performance of Theta(lg(n)).