我正在尝试在 Scala 中实现一个递归函数来计算列表中的最大值
I am trying to implement a recursive function in Scala to calculate Maximum value in a List
def max(xs: List[Int]): Int = {
if (xs.isEmpty) throw new java.util.NoSuchElementException("List is Empty")
else
max1(0,xs)
def max1(num :Int, x : List[Int]) : Int = {
if(x.isEmpty) return num
else if(num>x.head) max1(num,x.tail)
else
max1(x.head,x.tail)
}
}
我正在尝试实现代码以在输入空列表时抛出错误,并尝试使用另一个辅助函数以递归方式获取列表的最大值
error: type mismatch; found : Unit required: Int
将max1
的定义放在if
语句之前。
函数的 return 值是其主体中最后一条语句的结果。你现在的方式,最后一条语句是 def
,它的结果是 Unit
.
您可以使用这些代码来解决该问题。
object Maximum {
def apply(numbers: List[Int]): Int = {
if (numbers.isEmpty) throw new Exception("List shouldn't be empty")
max(numbers)
}
private def max(numbers: List[Int], maxNumb: Int = 0): Int = numbers match {
case x::xs => if (x > maxNumb) max(xs, x) else max(xs, maxNumb)
case Nil => maxNumb
}
}
Maximum(List(1,9,9,12,34))
Maximum(List())
您可以使用用户 require()
例如使用这个更惯用的递归代码:
def max(xs: List[Int]): Int = {
require( xs.nonEmpty, ">>> Empty List <<<" )
def max1( num:Int, x:List[Int] ) : Int = x match {
case Nil => num
case y :: ys => max1( (if( num>y ) num else y), ys )
}
max1(0,xs)
}
然后,
max(List())
returns:java.lang.IllegalArgumentException:要求失败:>>> 空列表 <<<
定义
trait XInt
case class N(i: Int) extends XInt
case object NoInt extends XInt
和模式匹配一个空列表 return NoInt
否则一个 N
实例。
def max(xs: List[Int]): Int = {
if (xs.isEmpty) throw new java.util.NoSuchElementException("List is Empty")
else
max1(0,xs)
def max1(num :Int, x : List[Int]) : Int = {
if(x.isEmpty) return num
else if(num>x.head) max1(num,x.tail)
else
max1(x.head,x.tail)
}
}
我正在尝试实现代码以在输入空列表时抛出错误,并尝试使用另一个辅助函数以递归方式获取列表的最大值
error: type mismatch; found : Unit required: Int
将max1
的定义放在if
语句之前。
函数的 return 值是其主体中最后一条语句的结果。你现在的方式,最后一条语句是 def
,它的结果是 Unit
.
您可以使用这些代码来解决该问题。
object Maximum {
def apply(numbers: List[Int]): Int = {
if (numbers.isEmpty) throw new Exception("List shouldn't be empty")
max(numbers)
}
private def max(numbers: List[Int], maxNumb: Int = 0): Int = numbers match {
case x::xs => if (x > maxNumb) max(xs, x) else max(xs, maxNumb)
case Nil => maxNumb
}
}
Maximum(List(1,9,9,12,34))
Maximum(List())
您可以使用用户 require()
例如使用这个更惯用的递归代码:
def max(xs: List[Int]): Int = {
require( xs.nonEmpty, ">>> Empty List <<<" )
def max1( num:Int, x:List[Int] ) : Int = x match {
case Nil => num
case y :: ys => max1( (if( num>y ) num else y), ys )
}
max1(0,xs)
}
然后,
max(List())
returns:java.lang.IllegalArgumentException:要求失败:>>> 空列表 <<<
定义
trait XInt
case class N(i: Int) extends XInt
case object NoInt extends XInt
和模式匹配一个空列表 return NoInt
否则一个 N
实例。