どうしてx^nと謳っておきながら
コードとドキュメントはx^yなの?
記号の不統一性は混乱する元です。

また、場合わけが気持ち悪いですね。
むしろループや再帰を効率的に使ってもっと簡潔に書くべきでは?

ループを使った場合をささっと書くと、

int res=1;
for(int i=0;i<y;++i){
res*=x;
}

て感じ。

ちなみに0^0=1は定義だけど、いいね?