Recursive algorithms

CSharp · Console

/Program.cs

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);
        }
    }
}
  

  
;