【发布时间】:2023-04-03 23:20:01
【问题描述】:
我有这个尾递归函数,如果列表中的任何元素是 Boolean 值,则返回 true。
def anyBoolTailRec[A](test: A=> Boolean, a: List[A]): Boolean = a match {
case Nil => false
case h :: t if(!test(h)) => anyBoolTailRec(test, t)
case _ => true
}
测试参数只是一个检查值类型的函数:
def isBool(i: Any) = i match {
case _: Boolean => true
case _ => false
}
函数是这样调用的:
anyBoolTailRec(isBool, List(1, 2, "hi", "test", false))
>>> true
问题:我怎样才能把这个尾递归解决方案变成一个非尾递归解决方案?由于我们要返回布尔值,我不知道该怎么做。
注意:我知道尾递归解决方案在 Scala 中更好。
【问题讨论】:
-
将第二行改为
case h :: t if(!test(h)) => val foo = anyBoolTailRec(test, t); foo下一个问题是如何让它成指数增长? -
如何让它指数化?不,我只是想知道如何将我的功能更改为非尾解决方案。布尔返回值让我失望。我习惯于做类似 foo(test, t + 1)
-
你为什么要问两次?你已经问过这个话题:stackoverflow.com/questions/46598594/…