计算Scala中的更改 - 代码不会打印

时间:2016-05-26 03:49:34

标签: scala

我是Scala的初学者,也是编程的初学者。试图转向数据科学并且我自己学习东西。如果这是一个非常微不足道的问题,我道歉。有人可以告诉我这里的主要功能有什么问题吗?我试图在countChange函数中传递参数,但代码不打印任何东西。我试图查明并理解,但我完全失去了,任何帮助将不胜感激!谢谢!

object main {
  def countChange(money: Int, change: List[Int]): Int = {
    def totalWays(sum: Int, denomination: List[Int]): Int = {
      if (sum < 0) 0
      else
        if (sum == 0) 1
        else
          if (denomination.isEmpty && sum >= 0) 0
          else
           countChange(sum, denomination.tail) + countChange(sum-denomination.head,denomination) 
    }
    countChange(money, change.sortWith(_.compareTo(_) < 0))

  }


  def main(args: Array[String]) {
    val l = List(1,2)
    println(countChange(0,l))

}
}

1 个答案:

答案 0 :(得分:2)

@jwvh评论中指出的细节正在进行中。看来你从某个地方复制了一些东西而且你迷路了。 您不需要totalWays内部函数,因为它在调用countChange时已经实现了您打算执行的操作。因此,您可以简单地解开它并相应地重命名变量:

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

此外,您应该使用初始金额和面额列表来调用它:

  def main(args: Array[String]): Unit = {
    val l = List(1,2)
    println(countChange(3,l))
  } 
  // prints: 2