Все остальные, кажется, считают, что опыт положительный.Возможно, можно изменить, чтобы правильно обрабатывать 0 ^ 0 как NaN, а не 1, если это важно для вашего приложения.
double int_power(double base, int exp) {
if (exp == 0)
return 1;
if (exp > 0)
return base*int_power(base, exp-1);
else
return int_power(base, exp+1)/base;
}