import java.math.BigInteger; 计算 斐波那契数列(Fibonacci sequence)。
编写 fibon.groovy 如下
// 使用 groovy的 Memoize注解实现函数的记忆化
import java.math.BigInteger;
import groovy.transform.Memoized
@Memoized
def fib(n) {
if (n < 2) return n;
return fib(n-1) + fib(n-2)
}
def n = new BigInteger("200");
println "fib(${n})= " +fib(n);
运行 groovy fibon
fib(200)= 280571172992510140037611932413038677189525
如果改为 fib(300) 就会报错:溢出
计算 斐波那契数列(Fibonacci sequence),不受长整型位数限制。
编写 fibonacci.groovy 如下
import java.math.BigInteger;
public class Fibonacci {
// 使用迭代的方法来计算Fibonacci数列
public static BigInteger fib(int n) {
def a = new BigInteger("0");
def b = new BigInteger("1");
def c = new BigInteger("0");
while(n >0) {
c = a.add(b);
a = b;
b = c;
n--;
}
return a;
}
public static void main( args) {
if (args.size()==1){
try {
def n = Integer.parseInt(args[0]);
if (n >0) println "fib(${n})= " +fib(n);
} catch (NumberFormatException ex){
ex.printStackTrace();
}
} else {
println " usage: groovy fibon n ";
}
}
}
运行 groovy fibonacci 365
fib(365)= 8531073606282249384383143963212896619394786170594625964346924608389878465365
用 python 校验,以上结果正确:
python fibonacci.py 365
fib1(365)= 8531073606282249384383143963212896619394786170594625964346924608389878465365


1149

被折叠的 条评论
为什么被折叠?



