我使用long数据类型工作的方法,但是当我去调用我的BigInteger递归方法时,当我打印它时它会显示“null”。 这是我的长递归方法,对我有用:
public static long fib_rec(int n){
long result=1;
if(n<=2){
return result;
}
else{
if(fval[n]!=0){
result=fval[n];
}
else{
result = fib_rec(n-1) + fib_rec(n-2);
fval[n] = result;
}
return result;
}
}
同样,该方法完美无缺,直到我越过n = 94,其中值对于长数据类型而言太大。 这是我的BigInteger尝试,完整的程序:
public class BigInt {
static BigInteger[] fval;
public static void main(String[] args) {
int index;
Scanner input = new Scanner(System.in);
index = input.nextInt();
fval = new BigInteger[index + 1];
System.out.println(fib_rec(index));
}
public static BigInteger fib_rec(int index){
BigInteger result = BigInteger.ONE;
if(index <= 2){
return result;
}
else{
if(fval[index] != BigInteger.ZERO){
result=fval[index];
}
else{
result = fib_rec(index-1).add(fib_rec(index-2));
fval[index] = result;
}
return result;
}
}
}
这会返回null,我不知道为什么......
答案 0 :(得分:2)
你假设一个BigInteger数组开始用长数组填充零,但它开始充满空值,因为它是一个对象数组,所以这个:
if(fval[index] != BigInteger.ZERO){
result=fval[index];
}
将始终返回null,因为null
值不等于BigInteger.ZERO
。
如果你添加:
for (int i = 0; i < index+1; i++) {
fval[i] = BigInteger.ZERO;
}
在致电fib_rec
之前,它可以运作。