Используйте Дейва Андерсона в качестве основы, но также рассмотрите особые случаи, где:
1) x is 0
2) e is negative.
Опять же, нет кода, поэтому вы можете попытаться выяснить это самостоятельно: -)
Обновление: Убедитесь, что вы создали несколько контрольных примеров и убедитесь, что все работают так, как вы думаете.После того, как тесты пройдут, вы узнаете, что ваша рекурсивная функция мощности работает правильно.
Пример: Если бы у вас было время, чтобы выяснить это самостоятельно, я бы предложил решение,с тестами:
int main(void)
{
// n = 0 special case
test(0, 0, 1);
test(4, 0, 1);
test(-5, 0, 1);
// x = 0 special case
test(0, 0, 1);
test(0, 2, 0);
// normal use
test(4, 1, 4);
test(4, -1, 0.25);
test(-4, 3, -64);
test(8, 2, 64);
test(2, 3, 8);
test(2, -3, 0.125);
test(2, -5, 0.03125);
// Invalid input tests
std::cout << std::endl << "Invalid input tests" << std::endl;
test (0, -2, NULL);
test(0, -4, NULL);
// Negative Tests
std::cout << std::endl << "Negative tests (expect failure)" << std::endl;
test(4, 0, 4);
test(2, 1, 1);
test(2, -5, 0.0313);
return 0;
}
double power(int x, int n)
{
// check for invalid input
if (n == 0)
{
return 1;
}
if (n > 0)
{
return x * power(x, n - 1);
}
else if (n < 0)
{
return 1 / (x * power(x, -n - 1));
}
}
bool test(int x, int n, double expected)
{
if (x == 0 && n < 0)
{
std::cout << "Testing " << x << "^" << n << ", result = 'Invalid input'." << std::endl;
return false;
}
double result = power(x, n);
std::cout << "Testing " << x << "^" << n << ", result = " << result << ". Expected " << expected << " - test " << ((result == expected) ? "PASSED" : "FAILED") << std::endl;
return true;
}
Вывод:
Testing 0^0, result = 1. Expected 1 - test PASSED
Testing 4^0, result = 1. Expected 1 - test PASSED
Testing -5^0, result = 1. Expected 1 - test PASSED
Testing 0^0, result = 1. Expected 1 - test PASSED
Testing 0^2, result = 0. Expected 0 - test PASSED
Testing 4^1, result = 4. Expected 4 - test PASSED
Testing 4^-1, result = 0.25. Expected 0.25 - test PASSED
Testing -4^3, result = -64. Expected -64 - test PASSED
Testing 8^2, result = 64. Expected 64 - test PASSED
Testing 2^3, result = 8. Expected 8 - test PASSED
Testing 2^-3, result = 0.125. Expected 0.125 - test PASSED
Testing 2^-5, result = 0.03125. Expected 0.03125 - test PASSED
Invalid input tests
Testing 0^-2, result = 'Invalid input'.
Testing 0^-4, result = 'Invalid input'.
Negative tests (expect failure)
Testing 4^0, result = 1. Expected 4 - test FAILED
Testing 2^1, result = 2. Expected 1 - test FAILED
Testing 2^-5, result = 0.03125. Expected 0.0313 - test FAILED