Tôi đang viết chức năng đệ quy cho số Coin (change) problem trong Scala.StackOverflowError cho thay đổi đồng xu trong Scala?
Thời gian thực hiện của tôi với StackOverflowError và tôi không thể hiểu tại sao nó xảy ra.
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
đây là cuộc gọi của tôi:
println(countChange(20, List(1,5,10)))
đây là định nghĩa của tôi:
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)
}
Chỉnh sửa: Tôi chỉ cần thêm sự khác câu lệnh if trong hỗn hợp:
else if(money<0)
combos
nó đã thoát khỏi lỗi nhưng đầu ra của tôi là 1500 cái gì đó: (w mũ là sai với logic của tôi?
Bạn đang gọi thứ hai cho 'recurs' (' tái phát (tiền xu .head, coins, combos + 1) ') giới thiệu một vòng lặp vô hạn. – Nicolas