2017-09-30 70 views
4

我想使用遞歸來設定一些問題集,但每次我的返回值是。在C中返回錯誤值的遞歸函數#

這裏是我的功能

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應該是。 我用的斷點和一切工作正常,直到最後一分鐘,其中計數器將來自值

讓我再說一遍,我可以使用循環很容易地解決這個問題,但我的目標是要了解recursion更好。 任何建議是有幫助的,謝謝你的時間。

+4

提示:不關你的遞歸調用做因爲你不使用從他們的返回值有用的東西。你正在做一堆工作,但忽略了結果。 –

回答

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

謝謝,這就像我無視每一次我稱之爲函數返回值的事實 – Yollo