私はScalaのCoin (change) problemの再帰関数を書いています。Scalaのコイン変更のStackOverflowError?
私の実装はStackOverflowErrorで壊れてしまい、なぜそれが起こるのか理解できません。これは私の定義である
println(countChange(20, List(1,5,10)))
:
Exception in thread "main" java.lang.StackOverflowError
at scala.collection.immutable.$colon$colon.tail(List.scala:358)
at scala.collection.immutable.$colon$colon.tail(List.scala:356)
at recfun.Main$.recurs$1(Main.scala:58) // repeat this line over and over
この
は私の呼び出しですdef countChange(money: Int, coins: List[Int]): Int = {
def recurs(money: Int, coins: List[Int], combos: Int): Int =
{
if (coins.isEmpty)
combos
else if (money==0)
combos + 1
else
recurs(money,coins.tail,combos+1) + recurs(money-coins.head,coins,combos+1)
}
recurs(money, coins, 0)
}
編集:
else if(money<0)
combos
:私はちょうどミックス内の他のif文を追加しました
それはエラーを取り除いたが、私の出力は1500何か:(w帽子は私の論理に間違っていますか?ここで
ためDP from novice to advancedを参照してください再帰的なアプローチで再計算の多くを減らすためにDPのアプローチです.head、coins、combos + 1) ')は無限ループを導入する。 – Nicolas