#include <iostream>

double power(double x, unsigned pow, double _acc = 1)
{
	if (pow == 0) return _acc;
	if (pow%2)
		return power(x, pow - 1, _acc * x);
	else
		return power(x * x, pow / 2, _acc);
}

double power(double x, int y)
{
	unsigned pow   = static_cast<unsigned>(y >= 0 ? y : -(y+1) + 1UL);
	double x_pow = power(x, pow);
	return (y >= 0 ? x_pow : 1. / x_pow);
}

int main() 
{
	std::cout << power(2, 5) << std::endl;
	std::cout << power(2.5, 3) << std::endl;
	std::cout << power(2, -5) << std::endl;
	std::cout << power(-1., 200000) << std::endl;
}