Habs mir kurz angesehen... also, du willst eine Funktion, die bei zwei Eingabe-Parametern x und y das Ergebnis "x hoch y" bzw. "x zur Potenz y" zurückgibt, so hast du zwei Möglichkeiten, diese Funktion zu bewerkstelligen:

Wie du weisst, bedeutet "zur Potenz y", dass du den Wert y mal mit sich selbst multiplizierst, x zur Potenz 2 ist soviel wie x * x. Der erste logische Ansatz wäre dabei der iterative

Code:
double powerIter(double x, int y) {
  double res = 1; 
  int i;
  for(i = 0; i < y; i++) {
    res *= x;
  }
  return res;
}
Logisch, ich lasse die Funktion den Wert solange mit sich selbst mal nehmen, solange es die Funktion verlangt.

Beim rekursiven Ansatz hingegen brauche ich zwei Dinge: Den rekursiven Aufruf, und eine Abbruchbedingung.

Die Abbruchbedingung ist auch klar: Ich möchte y mal x mit sich selbst produzieren, also zähle ich von y einfach runter bis 0. Ist y also 0, gebe ich einfach x zurück, ansonsten rufe ich die Funktion nochmal auf, kennzeichne allerdings, dass ich bereits einmal in der Funktion war (zähle also von y eins herunter...). Das ganze sieht dann so aus:

Code:
double powerRek(double x, int y) {
  /* Abbruchbedingung */
  if(y == 0) {
    return x;
  /* Rekursiver Aufruf */
  } else {
    return x * powerRek(x, --y);
  }
}
Eleganter, aber weit langsamer, und für derartige Mickymausaufgaben auch nicht wirklich nötig (Fehler vorbehalten, kann natürlich sein, dass y == 1 sein muss, bzw. die Bedingung im iterativen Teil i <= y sein muss, aber das sollst du einfach selbst ausprobieren).