我正在爲Scala中的Coin (change) problem編寫遞歸函數。StackOverflowError Scala中的硬幣更改?
我的實現中斷了StackOverflowError,我無法弄清楚它爲什麼會發生。
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
這是我的電話:
println(countChange(20, List(1,5,10)))
這是我的定義:
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語句可在混合:
else if(money<0)
combos
它擺脫了錯誤,但我的輸出是1500東西:(瓦特我的邏輯有錯誤嗎?
你第二次調用'recurs'('重複(錢硬幣.head,coin,combos + 1)')引入一個無限循環。 – Nicolas 2013-04-07 06:21:29