2017-09-30 2 views
4

J'essaie de trouver un problème en utilisant la récursivité mais chaque fois que ma valeur de retour est .Fonction récursive renvoyant une valeur erronée en C#

Voici ma fonction

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

Et voici mon appel

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

L'objectif est de revenir le changement à l'utilisateur en lui donnant le plus petit nombre possible de pièces de monnaie, les pièces disponibles sont 25, 10, 5 et 1, donc dans ce cas return value devrait être . Je l'ai utilisé tous les points d'arrêt et fonctionne bien jusqu'à la dernière minute où compteur tourne, la valeur de à 1.

Permettez-moi de dire encore une fois, je peux facilement résoudre ce problème en utilisant la boucle, mais mon but est de comprendre recursion mieux. Toute suggestion est utile, merci de votre temps.

+4

Astuce: aucun de vos appels récursifs ne quelque chose d'utile, étant donné que vous n'êtes pas en utilisant la valeur de retour de leur part. Vous faites beaucoup de travail, mais vous ignorez le résultat. –

Répondre

3

Lorsque vous appelez le numberOfCoins, vous venez de supprimer la valeur de retour. Au lieu de cela, vous devriez l'utiliser et l'ajouter au compte actuel. Cela vous permettra également de supprimer le counter paramètre:

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

merci, c'est comme si j'étais aveugle au fait que ma fonction renvoie de la valeur chaque fois que je l'appelle – Yollo