そだね。
87さんのだと最終的な結果がx^(2^y)になるかな?
swapと一緒でtmpが一個いるよ。

tmp無しで書こうと思ったら、church数みたいに

int func(int xx,int yy){return (n==0)?1:xx*func(yy-1);}

とかあらかじめ関数を作っておいて、

printf("%d ^ %d = %d\n",x,y,func(y));

でOK。
しかし再帰でバグ出すと最悪数時間が消えるので、
他にいい方法があったり、あるいは急ぐときにはあんまりお勧めしないです。