gpt4 book ai didi

scala - 尾递归问题

转载 作者:行者123 更新时间:2023-12-03 18:11:26 27 4
gpt4 key购买 nike

我们在 Scala 中试验并行集合,想检查结果是否有序。为此,我在 REPL 上编写了一个小函数来对我们生成的非常大的 List 进行检查:

def isOrdered(l:List[Int]):Boolean = { l match { 
case Nil => true
case x::Nil => true
case x::y::Nil => x>y
case x::y::tail => x>y & isOrdered(tail)
}
}

它因 stackOverflow 失败(这里的问题多么合适!)。
我期待它是尾部优化的。怎么了?

最佳答案

isOrdered 不是代码中的最后一个调用, & 运算符是。试试这个:

@scala.annotation.tailrec def isOrdered(l:List[Int]):Boolean = { l match { 
case Nil => true
case x::Nil => true
case x::y::Nil => x>y
case x::y::tail => if (x>y) isOrdered(tail) else false
}
}

关于scala - 尾递归问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822467/

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