简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM