最近在OJ中,在博主提交斐波那契数列解答时,这是第一版的代码:
private static int fib(int n) {
if (n == 0) {
return 0;
}
int[] arr = new int[n + 1];
arr[1] = 1;
return fib2(n, arr);
}
private static int fib2(int n, int[] arr) {
if (n < 2) {
return arr[n];
}
if (arr[n] > 0) {
return arr[n];
}
arr[n] = fib2(n - 1, arr) + fib2(n - 2, arr);
return arr[n];
}
相信这段代码很多人并不陌生,这是斐波那契数列的递归实现
提交代码后发现如下结果:
再次检查代码,并没有发现什么问题,于是查看题解发现了1000000007这个咋一看很奇异的数字(原谅我孤陋寡闻了);
原因: 网上一查原来是因为这个数字是10位的最小质数,上面的代码并没有问题,只是数字太大溢出了,需要将计算结果 % 1000000007才能保证得出的结果在int 范围中;