Yollo Yollo - 3 years ago 141
C# Question

Recursive function returning wrong value in C#

I am trying to figure some problem set using recursion but every time my return value is 1.

Here is my function

static int numberOfCoins(int n, int counter)
{
if (n >= 25)
{
counter++;
numberOfCoins(n - 25,counter);
}
else if (n >= 10)
{
counter++;
numberOfCoins(n - 10,counter);
}
else if (n >= 5)
{
counter++;
numberOfCoins(n - 5, counter);
}
else if (n > 0)
{
counter++;
numberOfCoins(n - 1, counter);
}

return counter;
}


And here is my call

int returnValue = numberOfCoins(32, 0);
Console.WriteLine("counter: " + returnValue);


The goal is to return change to user giving him smallest possible number of coins, available coins are 25, 10, 5 and 1, so in this case return value should be 4.
i've used breakpoints and all works fine until last minute where counter turns value from 4 to 1.

Let me say again, i can easily solve this problem using loop, but my goal is to understand recursion better.
Any suggestion is helpful, thank you for your time.

Answer Source

When you call numberOfCoins you just discard the return value. Instead, you should use it and add it to the current count. This will also allow you to remove the counter parameter:

static int numberOfCoins(int n)
{
    if (n >= 25)
    {
        return 1 + numberOfCoins(n - 25);
    }
    else if (n >= 10)
    {
        return 1 +  numberOfCoins(n - 10);
    }
    else if (n >= 5)
    {
        return 1 +  numberOfCoins(n - 5);
    }
    else if (n > 0)
    {
        return 1 + numberOfCoins(n - 1);
    }

    return 0;
}
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download