【发布时间】:2019-01-24 00:37:02
【问题描述】:
我正在为 Scala 中的Coin (change) problem 编写递归函数。
我的实现因 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(recurs(money-coins.head,coins,combos+1)) 引入了一个无限循环。
标签: scala