簡體   English   中英

遞歸函數在C#中返回錯誤的值

[英]Recursive function returning wrong value in C#

我試圖使用遞歸來計算一些問題集,但每次我的返回值為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 任何建議都有幫助,謝謝你的時間。

當您撥打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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM