递归函数在C#

时间:2017-09-30 20:56:05

标签: c# recursion

我试图用递归计算一些问题集,但每次我的返回值 1

这是我的功能

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

这是我的电话

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

目标是将更改返回给用户,为他提供尽可能少的硬币,可用硬币为25,10,5和1,因此在这种情况下return value 4 。 我使用了断点,所有工作都很好,直到最后一刻,计数器将值从 4 变为 1.

让我再说一次,我可以使用循环轻松解决这个问题,但我的目标是更好地理解recursion。 任何建议都有帮助,谢谢您的时间。

1 个答案:

答案 0 :(得分:3)

当您致电numberOfCoins时,您只需丢弃返回值。相反,您应该使用它并将其添加到当前计数。这也允许您删除counter参数:

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