Questions tagged «tail-recursion»

尾递归是一种递归策略,其中函数执行一些工作,然后调用自身。“尾部”指的是递归位于函数的最后。许多(尤其是功能强大的)编程语言编译器可以将这些类型的调用转换为迭代,这意味着可以使用支持的语言中的尾部递归,而不必担心堆栈溢出,无论调用数量如何。

1
如何解释Scala Cats / fs2中的堆栈安全性?
这是fs2文档中的一段代码。该函数go是递归的。问题是我们如何知道它是否是堆栈安全的,以及如何推断任何函数是否是堆栈安全的? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long): Pull[F,O,Unit] = { s.pull.uncons.flatMap { case Some((hd,tl)) => hd.size match { case m if m <= n => Pull.output(hd) >> go(tl, n - m) case m => Pull.output(hd.take(n.toInt)) >> Pull.done } case None …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.