【发布时间】:2018-02-17 22:44:17
【问题描述】:
我正在尝试计算大量斐波那契数列,因此我使用大整数。我最多可以达到 10000 个,但是我的堆栈空间用完了。我意识到我可以增加堆栈和堆空间,但我的理解是尾递归可以解决空间问题。这是我的代码..
public class FibRecursion{
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] != null){
result=fval[index];
}
else{
result = fib_rec(index-1).add(fib_rec(index-2));
fval[index] = result;
}
return result;
}
}
}
【问题讨论】:
-
Java 没有尾递归。但是你可以只使用迭代公式
-
请参阅stackoverflow.com/questions/32685660/… 可能会有所帮助
-
尾递归消除,即使 java 有它,在这种情况下也无济于事。让任何递归代码变得高效的不仅仅是一些魔法尘埃。
标签: java recursion fibonacci tail-recursion