- 题目
1,1,2,3,5,8,13,21,… 称为斐波那契数列
它的第3项是2,它的第100项是多少?
- 代码
方法
// long最大值 9223372036854775808
public class FibonacciNumber {
static long[] mem = new long[102];
public static void main(String[] args) {
mem[0] = mem[1] = 1l;
System.out.println(fib());
}
static long fib(int n) {
return mem[n]==0?mem[n] = fib(n-1) + fib(n-2):mem[n];
}
}
- 结果
这个结果是错误的,溢出了
1298777728820984005
思考
用一个long型数组将结果存储起来会加快程序速度BigInteger
方法一——不记录这些值
BigInteger c = new BigInteger("1");
for(int i=3;i<=100;i++) {
c = a.add(b);
a = b;
b = c;
}
System.out.println(c);
方法二——记录这些值
import java.math.BigInteger;
public class FibonacciNumber {
static BigInteger[] mem = new BigInteger[101];
public static void main(String[] args) {
mem[0] = mem[1] = new BigInteger("1");
System.out.println(fib(99));
}
static BigInteger fib(int n) {
return mem[n]==null?mem[n] = fib(n-1).add(fib(n-2)) :mem[n];
}
}
- 正确结果
354224848179261915075