CSharp · Console
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(Tests.AreEqual(Power.CopmutePower(3, 0), 1));
Console.WriteLine(Tests.AreEqual(Power.CopmutePower(2, 3), 8));
Console.WriteLine(Tests.AreEqual(Power.CopmutePower(5, 2), 25));
Console.WriteLine(Tests.AreEqual(Power.CopmutePower(5, -2), 0.04));
}
static class Tests
{
public static string AreEqual(double expected, double actual)
{
return expected == actual ? string.Format("Test Passed- Expected {0} - Actual {1}" , expected , actual)
: string.Format("Test Failed - Expected {0} - Actual {1}", expected , actual);
}
}
static class Power
{
public static double CopmutePower(double x , double n)
{
// base case
if (n == 0)
{
return 1;
}
// n is negative
else if (n < 0)
{
return 1 / CopmutePower(x, -n);
}
// n is odd
else if (IsOdd(n))
{
return x * CopmutePower(x, n - 1);
}
// n is even
else if (IsEven(n))
{
var y = CopmutePower(x, n / 2);
return y * y;
}
else
{
return 0;
}
}
static bool IsEven(double n)
{
return n % 2 == 0;
}
static bool IsOdd(double n)
{
return !IsEven(n);
}
}
}