Art*_*ero 6 recursion groovy tail-recursion factorial tail-call-optimization
我编码了3个因子算法:
trampoline()方法,并按照我的预期正常工作.def factorial
factorial = { BigInteger n ->
if (n == 1) return 1
n * factorial(n - 1)
}
factorial(1000) // Stack Overflow
factorial = { Integer n, BigInteger acc = 1 ->
if (n == 1) return acc
factorial(n - 1, n * acc)
}
factorial(1000) // Stack Overflow, why???
factorial = { Integer n, BigInteger acc = 1 ->
if (n == 1) return acc
factorial.trampoline(n - 1, n * acc)
}.trampoline()
factorial(1000) // It works
Run Code Online (Sandbox Code Playgroud)
从版本 2.3 开始,Groovy 通过方法的 @TailRecursive 注释支持尾递归: http://java.dzone.com/articles/groovy-goodness-more-efficient
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |