再帰を使用したScalaのコイン交換アルゴリズム 質問する

再帰を使用したScalaのコイン交換アルゴリズム 質問する

私は再帰を使用して Scala でコイン変更問題をプログラムしようとしています。私が書いたコードは次のとおりです。

def countChange(money: Int, coins: List[Int]): Int = {
  def ways(change: List[Int], size: Int, capacity: Int): Int = {
    if(capacity == 0) 1
    if((capacity < 0) || (size <= 0)) 0

    //println and readLine to check and control each recursive call.

    println("calling ways(",change, change.length-1, capacity,") + ways(",change,   change.length, capacity - change(change.length - 1),")")
    readLine()
    //

    ways(change, change.length-1, capacity) + ways(change, change.length, capacity - change(change.length - 1))
  }
  ways(coins, coins.length, money)
}

コードを実行すると、終了せず、最初の再帰呼び出しを呼び出し続けます。どこが間違っているのでしょうか?

ベストアンサー1

素敵でシンプル

def countChange(money: Int, coins: List[Int]): Int = {
  if(money == 0)
    1
  else if(money > 0 && !coins.isEmpty)
    countChange(money - coins.head, coins) + countChange(money, coins.tail)
  else
    0
}

おすすめ記事