我正在为Scala中的Coin(更改)问题编写递归函数.
我的实现打破了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
Run Code Online (Sandbox Code Playgroud)
这是我的电话:
println(countChange(20, List(1,5,10)))
Run Code Online (Sandbox Code Playgroud)
这是我的定义:
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)
}
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚在mix中添加了else if语句:
else if(money<0)
combos
Run Code Online (Sandbox Code Playgroud)
它摆脱了错误,但我的输出是1500的东西:(我的逻辑有什么问题?
我在函数外声明了一个变量,如下所示:
var s: Int = 0
Run Code Online (Sandbox Code Playgroud)
通过它如下:
def function(s: Int): Boolean={
s += 1
return true
}
Run Code Online (Sandbox Code Playgroud)
但是对于我的生活,错误线不会在"s + ="之下消失.我尝试了一切.我是Scala bww的新手.