我是靠谱客的博主 朴素水蜜桃,最近开发中收集的这篇文章主要介绍groovy伪递归优化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

groovy尾递归优化
1、官网文档闭包这一章介绍了使用trampoline进行伪递归优化

def factorial
factorial = { int n, def accu = 1G ->
if (n < 2) return accu
factorial.trampoline(n - 1, n * accu)
}
factorial = factorial.trampoline()
assert factorial(1)
== 1
assert factorial(3)
== 1 * 2 * 3
assert factorial(1000) // == 402387260.. plus another 2560 digits

2、这里提供了另一种方式

def tco = {
f -> {
def value
def active = false
def accumulated = []
def accumulator = {
Object[] args ->{
accumulated<<args
if(!active){
active = true
while(accumulated){
value = f(*accumulated.removeAt(0))
}
active = false
return value
}
}
}
return accumulator
}
}
def factorial
factorial = { n, accu = 1 ->
if (n < 2)
return accu
factorial(n - 1, n * accu)
}
factorial = tco(factorial)
def res= factorial(3)
println res

最后

以上就是朴素水蜜桃为你收集整理的groovy伪递归优化的全部内容,希望文章能够帮你解决groovy伪递归优化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部