【发布时间】:2014-06-19 17:02:34
【问题描述】:
我在玩 groovy,写了简单的一行程序:
groovy -e "(1..100_000).each{println((1..it).sum())}"
结果通过 '>' 通过管道传输到文件。
我有两个主要问题:
- 耗时太长(我对比了类似的python脚本)
- 输出超出范围,一段时间后我的总和变为负数
我怎样才能加速执行并在总和结果中有 long 或 bigint。
【问题讨论】:
标签: groovy
我在玩 groovy,写了简单的一行程序:
groovy -e "(1..100_000).each{println((1..it).sum())}"
结果通过 '>' 通过管道传输到文件。
我有两个主要问题:
我怎样才能加速执行并在总和结果中有 long 或 bigint。
【问题讨论】:
标签: groovy
所以,您已经回答了问题的第 2 部分。为了让它运行得更快,你可以递归地定义你的逻辑并利用memoization。
groovy -e "@groovy.transform.Memoized c(BigInteger i) { i == 1 ? 1 : c(i - 1) + i }; (1..100_000).each { println c(it) }"
【讨论】:
sum() 性能已经在这里讨论过:stackoverflow.com/questions/24009708/…
我发现了如何确定范围内的数字,只要不是 int:
groovy -e "(1..100_000).each{println((1..(it as long)).sum())}"
或使用 BigInteger:
groovy -e "(1..100_000).each{println((1..it).sum(0G))}"
仍然不知道性能问题,如果我可以做些什么来加速这个脚本。
【讨论】: