Я пошел шаг за шагом, глядя на эту функцию, и мне кажется, что следует избегать вызова sortedCoins(0-1)
, используя только sortedCoins(0)
и заканчивая при y == -1
, но почему-то это не так. Зачем?Scala: IndexOutOfBoundsException: -1
def countChange(amount: Int, coins: List[Int]): Int = {
var x = coins.length
var y = x
val sortedCoins = coins.sortWith(_ < _)
def cc(amount: Int, x: Int): Int = {
y -= 1
if (amount == 0) 1
else if (y == 0) cc(amount - x, sortedCoins(y))
else if (amount < 0 || y == -1) 0
else cc(amount, sortedCoins(y - 1)) + cc(amount - x, sortedCoins(y))
}
cc(amount, x)
}
Я предлагаю научиться использовать отладчик, чтобы шаг за шагом выполнять программу. Это было бы очень полезно для вас (для этой и будущих проблем). Удивительно, сколько вопросов задают вопрос, который мог бы попросить более простой для себя ответчик –
на другой ноте, которую он убивает, когда я вижу «монеты: Список [Int]», где это должно быть «монеты»: «Список [Монета] '. Как минимум, вы должны использовать класс значений, но на самом деле вы должны использовать ADT (Algebraic Data Type) –
Является ли это домашней проблемой? Похоже, я видел это в курсе Coursera .... – WillD