最近我通过函数式编程风格实现了insert_sort算法,它变得更加简洁和声明.问题是如何将其更改为尾递归,如果列表的大小增加到10000,代码将抛出异常.
def InsertSort(xs: List[Int]): List[Int] = xs match {
case Nil => Nil
case x::rest =>
def insert (x: Int, sorted_xs:List[Int]) :List[Int] = sorted_xs match{
case Nil => List(x)
case y::ys => if (x <= y) x::y::ys else y::insert(x,ys)
}
insert(x,InsertSort(rest))
}
Run Code Online (Sandbox Code Playgroud)