Search code examples
c#recursionworkflowpow

What is the workflow of Pow(x,y) function?


I'm going through "sololearn" and udemy courses to try to learn C#. I am doing the challenges but could not figure out how the below code resulted with 32 (as in 32 is the correct answer here and I am trying to find out why). Can someone explain this process to me, the method calling itself is throwing me I think.

static double Pow(double x, int y)
{
    if (y == 0)
    {
        return 1.0;
    }
    else
    {
        return x * Pow(x, y - 1);
    }
}

static void Main()
{
    Console.Write(Pow(2, 5));
} 

Please excuse my bad coding. I am trying to do it on mobile, which is difficult, the answer was 32. Can someone explain why?

Edit: Aplogies here is how I work through it. Pass 2 and 5 to Pow, check if y == 0 which is false, it is now y == 5 so x * pow(x, y-1) formula will be active. X is still 2, y is now 4 which means it fails the check again on whether it equals 0, this loop continues until it returns the 1.0, x has remained at 2 so 2 * 1.0 = 2 and not 32?


Solution

  • That method basically computes "x raised to the power of y". It does this in a recursive manner.

    First, it defines a base case: anything raised to the power of 0 is 1.

    Then, it defines what to do in all other cases: x * Pow(x, y - 1). Assuming y is big, what's x * Pow(x, y - 1)? It's x * x * Pow(x, y - 2), which in turn is x * x * x * Pow(x, y - 3). See the pattern here? Eventually, you will reach the point where the second argument, y - N, is 0, which as we have established, is 1. At that point, how many x * have we got? Exactly y.

    Let's see this in action for Pow(2, 5):

    Pow(2, 5)
    2 * Pow(2, 4)
    2 * 2 * Pow(2, 3)
    2 * 2 * 2 * Pow(2, 2)
    2 * 2 * 2 * 2 * Pow(2, 1)
    2 * 2 * 2 * 2 * 2 * Pow(2, 0)
    2 * 2 * 2 * 2 * 2 * 1
    

    Hence the result 32.