gpt4 book ai didi

scala - 为什么我的递归函数不返回列表的最大值

转载 作者:行者123 更新时间:2023-12-04 19:40:35 24 4
gpt4 key购买 nike

我在 Scala 中有以下递归函数,它应该返回列表中的最大大小整数。谁能告诉我为什么没有返回最大值?

  def max(xs: List[Int]): Int = {
var largest = xs.head
println("largest: " + largest)
if (!xs.tail.isEmpty) {
var next = xs.tail.head
println("next: " + next)
largest = if (largest > next) largest else next
var remaining = List[Int]()
remaining = largest :: xs.tail.tail
println("remaining: " + remaining)
max(remaining)
}
return largest
}

打印出来的语句告诉我,我已经成功地将列表中的最大值取回作为头部(这是我想要的),但该函数仍然返回列表中的原始头部。我猜这是因为 xs 的引用仍然引用原始 xs 列表,问题是我不能覆盖它,因为它是一个 val。

知道我做错了什么吗?

最佳答案

您应该使用内部调用 max 的返回值并将其与本地最大值进行比较。类似于以下内容(为了便于阅读而删除了 println):

def max(xs: List[Int]): Int = {
var largest = xs.head
if (!xs.tail.isEmpty) {
var remaining = List[Int]()
remaining = largest :: xs.tail
var next = max(remaining)
largest = if (largest > next) largest else next
}
return largest
}

再见。

关于scala - 为什么我的递归函数不返回列表的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18860221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com