我试图用递归计算一些问题集,但每次我的返回值 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
。
任何建议都有帮助,谢谢您的时间。
答案 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;
}