2017-11-30 1 views
0

Ich habe ein scala Code wie diese suchenErhöhung Zähler in für Schleife

object Main { 
    def countChangeIter(money: Int, coins: List[Int], counter: Int): Int= 

    if (money == 0) 1 
    else if (money < 0) 0 
    else { 
     for (i <- coins.indices) { 
     counter = counter + countChangeIter(money - coins(i), coins.drop(i), 0) 


    } 

    return counter 
} 


    def countChange(money: Int, coins: List[Int]): Int = countChangeIter(money, coins, 0) 


} 

Das Problem mit der counter = counter... Aussage. Wie kann ich implementieren, dass der Zähler sich um die Summe des alten Zählers ändert und was auch immer countChangeIter zurückgibt?

vielen Dank c14

+0

Können Sie ein von Ihnen erwartetes Beispiel veröffentlichen? – mickaelw

+0

Es gibt viel mehr Probleme hier als nur versuchen, ein "val" zu verwenden, als ob es eine 'var' wäre. Wenn 'money == 0 'gibt man' counter' zurück, nicht '1'. Gleiches mit, wenn 'Geld <0'. Wenn Sie versuchen zu zählen, auf wie viele verschiedene Arten eine Sammlung von Münzen eine Zielsumme erreichen kann, ist dieser Algorithmus nicht einmal knapp. – jwvh

Antwort

2

Sie können etwas tun:

object Main { 
     def countChangeIter(money: Int, coins: List[Int], counter: Int): Int= 

     if (money == 0) 1 
     else if (money < 0) 0 
     else { 
      var myCounter = counter 
      for (i <- coins.indices) { 
      myCounter = myCounter + countChangeIter(money - coins(i), coins.drop(i), 0) 


     } 

     return myCounter 
    } 


     def countChange(money: Int, coins: List[Int]): Int = countChangeIter(money, coins, 0) 


    } 

Beachten Sie, dass, wenn Sie dies in einer funktionalen Programmierung Einstellung tun müssen, .. gibt es wahrscheinlich etwas mit der Art und Weise Der Code ist strukturiert.